7 Stimmen

C++-Strukturausrichtung und STL-Vektoren

Ich habe eine Legacy-Datenstruktur, die 672 Byte lang ist. Diese Strukturen sind in einer Datei gespeichert, sequentiell, und ich muss sie einlesen.

Ich kann sie zwar einzeln einlesen, aber es wäre schön, wenn ich das tun könnte:

// 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);
}

Dies funktioniert, aber ich denke, es funktioniert nur, weil die Größe der Datenstruktur zufällig gleichmäßig durch die Strukturausrichtung Padding meines Compilers teilbar ist. Ich vermute, es wird auf einem anderen Compiler oder Plattform brechen.

Die Alternative wäre die Verwendung eines for Schleife, um jede Struktur nacheinander einzulesen.

Die Frage --> Wann muss ich mich um den Datenabgleich kümmern? Verwendet dynamisch zugewiesenen Speicher in einem Vektor Padding oder garantiert STL, dass die Elemente zusammenhängend sind?

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X