我使用64位mingw在windows x64上编译c代码。 我使用fwrite从内存阵列创建二进制文件。我想写〜20Gb调用这个函数,但它只写到1.4~1.5gb然后它停止写入(没有崩溃,只是挂在那里....什么都不做)。 有什么解决方案吗?现在我写了20个文件,然后合并它们。 将文件打开为' ab'但如果我使用该模式,我无法正确读取文件。
示例(伪)代码:
short* dst= malloc(20GB);
*calculations to fill dst*
file=fopen("myfile",'wb');
fwrite(dst, sizeof(short), 20GB/sizeof(short), file);
fclose(file)
该程序永远不会结束,文件大小永远不会超过1.5GB
答案 0 :(得分:4)
将它写成较小的块。为天堂的缘故,不要试图malloc
20gb。
答案 1 :(得分:0)
根据环境(操作系统,内存模型,文件系统),可能无法创建大于2 GB的文件。对于MSDOS文件系统尤其如此,如果没有足够的磁盘空间或分配配额,当然可以在任何文件系统上使用。
如果你展示你的代码,我们可以看看算法中是否存在任何内在缺陷,并建议替代方案。
答案 2 :(得分:-1)
Mingw是32位环境,AFAIK不存在64位变体。
mingw的fwrite()可能无法处理超过2 GB或4GB的内容,除非mingw感知大文件。
如果您能找到与truss(1)
类似的内容,请在此调试工具下运行您的程序。根据您提供的信息,无法提供更好的建议。