我有一个672字节长的遗留数据结构。这些结构都存储在一个文件中,按顺序,我需要在阅读它们C++结构比对和STL向量
虽然我可以用一个接一个读他们,这将是很好的做到这一点。
// I know in advance how many structs to read in
vector<MyStruct> bunchOfStructs;
bunchOfStructs.resize(numberOfStructs);
ifstream ifs;
ifs.open("file.dat");
if (ifs) {
ifs.read(&bunchOfStructs[0], sizeof(MyStruct) * numberOfStructs);
}
这工作,但我认为它只能工作,因为数据结构大小碰巧可以被我的编译器的结构对齐填充整除。我怀疑它会在另一个编译器或平台上崩溃。
另一种方法是使用for
循环来一次读取每个结构。
问题 - >何时需要关注数据对齐?在向量中动态分配内存使用填充还是STL确保元素是连续的?
这些结构是通过遗留代码写入文件还是您控制它? – 2010-02-21 23:47:44
它们由遗留代码编写。即使我可以更改它,我也可能需要阅读由较早版本的应用程序编写的文件。 – Nate 2010-02-21 23:49:57