我有一个遗留的数据结构,长度为672字节。这些结构以顺序方式存储在文件中,我需要读取它们。
虽然我可以逐个读取它们,但最好是这样做:
虽然我可以逐个读取它们,但最好是这样做:
// 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 是否保证元素是连续的?