c語言獲取變數、資料型別記憶體佔多少,使用sizeof運算子即可。
關於結構體所佔的記憶體多少,一般還要考慮對齊的問題。只所以要進行資料對齊是因為編譯器對結構的儲存的特殊處理能提高cpu儲存變數的速度,一般來說,32位的cpu記憶體以4位元組對齊,64位的cpu的以8位元組的對齊。一般可以使用#pragmapack()來指出對齊的位元組數。比如下面的程式碼,在debug會顯示結構體test的記憶體大小為28,如果生成release版則所佔記憶體大小為32。
#include?
#ifdef?_debug
#pragma?pack(4)
struct?test
{????
char?x[13];?//?13
int?d;????????//?4????
double?f;?????//?8
}ss;
#else
#pragma?pack(8)
#endif
int?main(void){??
printf("%d\n",?sizeof(ss));??
????return?0;
}
c語言獲取變數、資料型別記憶體佔多少,使用sizeof運算子即可。
關於結構體所佔的記憶體多少,一般還要考慮對齊的問題。只所以要進行資料對齊是因為編譯器對結構的儲存的特殊處理能提高cpu儲存變數的速度,一般來說,32位的cpu記憶體以4位元組對齊,64位的cpu的以8位元組的對齊。一般可以使用#pragmapack()來指出對齊的位元組數。比如下面的程式碼,在debug會顯示結構體test的記憶體大小為28,如果生成release版則所佔記憶體大小為32。
#include?
#ifdef?_debug
#pragma?pack(4)
struct?test
{????
char?x[13];?//?13
int?d;????????//?4????
double?f;?????//?8
}ss;
#else
#pragma?pack(8)
struct?test
{????
char?x[13];?//?13
int?d;????????//?4????
double?f;?????//?8
}ss;
#endif
int?main(void){??
printf("%d\n",?sizeof(ss));??
????return?0;
}