打算用 vector 装 1024 * 1024 * 64 个长度为 16 的 string,共计1GB大小,随机生成内容,写成文件,作为压缩测试的文件。
但是用以下语句,写出来的文件大小每次都不一样。
ofstream.write((char *)vector.data(), 16 * vector.size());
想了很久才悟到,vector 上的对象是在内存上是连续的,但指的是 string 对象。
string 的内容未必在(应该完全不在)vector 上。
vector 上的连续空间存放 string 对象,而非 string 的内容。
string 对象的内容应该是用 new 额外申请的。
所以应该
for (auto &each : vector<string>)
{
ofstream.write(each.data(), 16);
}
用此代码后,文件大小没有问题。