#program pack()バイト整列
2660 ワード
sidt IDT , #program pack(push,1) #program(pop)
:
struct/class 。
, int %4=0 , 。
struct , struct (VC6.0)—— ?
struct 。
, struct 。
, 32bit gcc struct
4Bytes(long long, double) , 4 。
#pragma pack(n)
n , 。
:
#pragma pack(push)
#program pack(pop)
, (push) n (pop) n—— , 。
:
# include
# include < string.h>
struct ta{
unsigned char a; // 1 Byte
unsigned long long b; // 8 Byte
unsigned short c; // 2 Byte
};
# pragma pack(2)
struct tb{
unsigned char a; // 1 Byte
unsigned long long b; // 8 Byte
unsigned short c; // 2 Byte
};
void dump( void *t, int size){
printf("---- @%x size = %2d ----
", ( int)t, size);
for ( int i = 0; i < size; ++i){
printf("%2d: %x
", i, *(( char*)t+i));
}
printf("-------------------
");
}
int main(){
ta a;
memset(&a, 0, sizeof(ta));
a.a = 0xff;
a.b = 0xffffffffffffffffull;
a.c = 0xffff;
dump(&a, sizeof(ta));
tb b;
memset(&b, 0, sizeof(tb));
b.a = 0xff;
b.b = 0xffffffffffffffffull;
b.c = 0xffff;
dump(&b, sizeof(tb));
return 0;
}