Unter der Annahme, ich habe ein struct wie die folgenden:Kann das struct-Padding vom Benutzercode sicher verwendet werden?
struct Struct {
char Char;
int Int;
};
und sizeof(int)
größer als eins ist und der Compiler fügt Polsterung für den Char
Elementvariable - ist der Compiler generierte Code erlaubt, die Werte der Füllbytes zu ändern ?
meine ich, wenn ich Zeigerarithmetik verwenden und einige Daten in die Füllbytes umgebenden Char
Elementvariable schreiben und später variable.Char =
Zuordnung tun, ist es möglich, dass der Code durch den Compiler erzeugt werden ebenfalls einige der Füllbytes zu überschreiben?
@nobugz, ich denke, es ist eine gültige Frage. Wenn Sie eine Struktur auf 0 setzen, bevor Sie die Werte festlegen, können Sie später mit memcmp zwei Strukturen vergleichen, aber nur, wenn der Compiler die Füllbytes nicht berührt. – quinmars
Nicht mit Padding, 'memset' oder' memcpy' mit Klassen und Strukturen herumspielen. Der ** sicherere ** und ** robustere ** Ansatz besteht darin, Methoden zum Lesen von und Schreiben in einen gepackten Puffer (z.B. 'unsigned char []') zu implementieren. Die Versicherung ist den extra ausführbaren Speicherplatz und die Zeit wert. –
@Thomas Matthews, ich glaube, du hast mich falsch verstanden. Ich sprach über den Vergleich zweier Strukturen, siehe http://stackoverflow.com/questions/141720/how-do-you-compare-structs-for-equality-in-c/141791#141791 – quinmars