我用c++编写了一段代码来测试64位(redhat linux)系统中文件输出的限制。硬盘和内存相当大(1TB 和 64Gb)。由于 64 位地址,我认为输出文件的最大大小为 2^63 字节。我使用 sizeof 在 c++(g++ 编译器)中验证以下数据类型
sizeof(double) = 8, sizeof(size_t) = 8, sizeof(std::streamsize) = 8
以下代码效果很好
#include <iostream>
#include <fstream>
using namespace std;
int main(int argc, char *argv[])
{
char data[200000][10000];
fstream outfile("output.dat", ios::out | ios::binary);
outfile.write(&data[0][0], 200000*10000);
outfile.close();
return 0;
}
但是如果我使用 double 代替
#include <iostream>
#include <fstream>
using namespace std;
int main(int argc, char *argv[])
{
double data[200000][10000];
fstream outfile("output.dat", ios::out | ios::binary);
outfile.write((char*)&data[0][0], sizeof(double)*200000*10000);
outfile.close();
return 0;
}
观察到“分段错误(核心转储)”。但我不明白为什么由于 sizeof(double)*200000*10000 < 2^63,所以输出该大小的数组应该没问题。