C語言關鍵字 sizeof 是一個操作符,返回對象或類型所占內存字節數,類型為size_t(定義在<stddef.h>),有2種用法:
sizeof不能應用的場合:
如果操作數的類型是VLA (variable length array),要進行evaluate;否則不需要evaluate,結果是一個整形常量。
示例1 進程間通信 比如storage allocator 和 I/O system
* *dp = alloc( *dp);
示例2 計算數組中元素個數
array / array[]
示例3 VLA大小計算
<stddef.h> b[n+]; b; = fsize3();
ANSI C規定字符型1字節,其余sizeof的返回結果與編譯器實現相關。在32位系統中:
1. 基本類型
_Bool 1
char 1
short 2
int 4
long 4
long long 8
float 4
double 8
long double 12
_Complex 16
void 1
2. 指針
4
3. 枚舉
4
4. 數組
數組長度 * 數組成員size
5. 結構體
字節對齊值:ALIGN
基本類型成員:SIZE
每個成員相對於結構體首地址的偏移都是min(ALIGN, SIZE)的整數倍,可能在成員間加填充字節
結構體總大小為min(ALIGN, SIZEmax)的整數倍,可能在最後一個成員後加填充字節
6. 聯合
規則類似struct
測試程序:
<stdio.h><complex.h> SIZEOF(x) printf("size of '%s' is %zd\n", #x, (x)); ); * (*)()); []); SIZEOF( [ {}); SIZEOF( { { c; s;}); SIZEOF( { i; { i; pack(push) pack(1) { i; pack(pop) { d; c;}); { c1:; :; c2:;}); SIZEOF( { i:; c: { { i; c;}; { { s1; c;}; { c2; { s1; c1;}; c; i;});