#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; }