32位機下:
struct test{
long long int t1;
char c;
int i;
char arr[2];
static int iv;
int test::iv=0;
求sizeof(test).
如果你考慮的是在vc/vs環境下,你的答案不是24,請繼續往下看:
如果你考慮的是在gcc/g++編譯環境下,你的答案不是16,請繼續往下看:
long long int :8位元組
char: 1位元組
int :4位元組
char 陣列:2位元組
static資料放置在全域性區,不算入該結構體的大小中。
vc編譯器下:struct的成員按照宣告的順序分配記憶體,並且某型別的起始位址必須能被該型別所佔位元組數整除。struct 的對齊方式是按照最寬位元組的成員的位元組數對齊,所以該結構體按8位元組對齊,所以是:
8位元組(long)
1(char)+3位元組(補齊) 4位元組(int)
2位元組(char arr)+6位元組(補齊)
所以一共是24位元組
而在gcc/g++編譯器下,struct的成員並不一定按照宣告順序分配記憶體,而是做了一定的優化。首先存位元組較寬的成員比如long long,int。對齊方式仍是按照最寬位元組的成員的位元組數對齊。所以記憶體情況應為如下:
8位元組(long long)
4位元組(int) 1位元組 (char) 2位元組(char arr) 1位元組(補齊)
所以一共是16位元組。
struct自然對齊和指定對齊
intel 微軟等公司曾經出過一道類似的面試題 include pragma pack 8 struct example1 struct example2 pragma pack int main int argc,char argv 答案是 816 4解釋 程式中第2行 pragma pack 8...
關於Union和Struct對齊
關於union,struct,還有機器數賦值,總是感覺自己認識不是特別深刻,這裡使用小demo程式加以說明,具體的詳細細節描述其它地方已經有說明和記錄,這裡不再說明。include union myun u int k a int main output size is 12 0 5 6 說明 in...
struct的用法和struct的對齊原則
struct在c語言中作為結構體。結構體定義 struct stu 使用 struct stu a 或者省略關鍵字struct stu a 也可以定義和使用同時 struct stu a 在後續使用中,出現結構體型別的地方都可以在前面加struct,用來提醒別人這個型別是自定義結構體 當然也可以省略...