在下面的一段代碼,的sizeof(結構)混淆
#include<stdio.h>
typedef struct {
int bit1:1;
int bit3:4;
int bit4:4;
} node;
int main(){
node n,n1,n2,ff[10];
printf("%d\n",sizeof(node));
return 0;
}
如何預測結構的大小?
在下面的一段代碼,的sizeof(結構)混淆
#include<stdio.h>
typedef struct {
int bit1:1;
int bit3:4;
int bit4:4;
} node;
int main(){
node n,n1,n2,ff[10];
printf("%d\n",sizeof(node));
return 0;
}
如何預測結構的大小?
如果不知道編譯器和編譯的目標平臺,就無法預測它。
通常,每個編譯器都會決定如何打包聯合,因此無法對最終大小做出很多假設。他們可以根據參數決定不同的佈局。
奇怪的引用是什麼...... – jalf 2010-06-19 03:07:19
你會發現你的結構的大小根據編譯器優化設置而改變。我預測這個結構在2到12個字節之間。
即使使用像你這樣的位域,你也不能總是預測結構的大小是什麼。編譯器可能會讓每個位字段佔用int的全部空間,或者可能只是您指定的1或4位。使用位字段雖然在內存存儲空間上很好,但對於運行時間和可執行文件大小通常不利。
一般來說是不可預測的,但實際上它會經常出現sizeof(int)。其本身往往是4;不常見2,有時8。
大多數情況下位字段將被打包,大多數情況下int類型將有9位或更多位的存儲空間。
int總是至少爲16位,標準是這樣說的(long總是至少爲32,而在C99中我們得到的long long至少是64,並且它們都可以大於這些大小) – Spudd86 2010-06-19 01:01:35
爲什麼你認爲你應該能夠準確地預測它? – 2010-06-18 18:12:43
你爲什麼想要? – 2010-06-18 18:22:09