Der folgende Code:Wie mache ich gcc ignoriert Padding beim Generieren .data Abschnitt?
#include <stdint.h>
uint8_t byte = 0x12;
uint16_t word = 0x1234;
int main(int argc, char *argv[])
{
return 0;
}
den .data
Abschnitt Inspizieren, es zeigt, dass byte
Variable 2 Bytes, nicht 1 als uint8_t
Versprechen:
Hex dump of section '.data':
0x00601020 00000000 00000000 00000000 00000000 ................
0x00601030 12003412 ..4.
Wie können wir sicherstellen, dass byte
1 Byte ist, auch es macht den Speicher falsch ausgerichtet? Ich habe versucht, #pragam pack(1)
hinzuzufügen, aber es ist immer noch dasselbe. Variable 1 ist aber Compiler pads es auf 2 Bytes
Gibt es einen bestimmten Grund, warum Sie das wollen? –
Warum sollten Sie jemals [Stapelausrichtung und -polsterung] deaktivieren (http://stackoverflow.com/questions/1061818/stack-allocation-padding-and-alignment)? –
Weil ich mich wundere, wenn die 'byte' Variable als 2 Bytes verwendet wird, nicht als 1 Byte. Aber es scheint, als ich versucht habe, Byte "-1" zu setzen, hat sich nur ein einzelnes Byte in "ff" geändert. Es scheint, dass 'gcc' sicherstellt, dass die Füllbytes nicht durch den gesamten erzeugten Code verwendet werden. –