C語言的基礎型別的記憶體空間
阿新 • • 發佈:2019-01-25
學習C語言的時候,對C語言的基礎型別所佔用的記憶體空間是非常模糊的。查閱資料,才知道C語言的基礎型別佔用的記憶體空間與編譯器位長有關,常見是16位、32位、64位。維西目前用的是32位、64位編譯器,而16位的資料是查閱資料得來的,問號是尚未查閱到,歡迎糾錯、補充。
int,long int,short int的寬度都可能隨編譯器而異。但有幾條鐵規(ANSI/ISO制訂的):
1、sizeof(short int)<=sizeof(int)
2、sizeof(int)<=sizeof(long int)
3、short int至少應為16位(2位元組)
4、long int至少應為32位(4位元組)
按表格總結:
1)字元型別char佔1個位元組。
2)浮點型基本型別float、double分別佔4個位元組和8個位元組。
3)short int等短最短(最短指在整型裡最短位元組數是2),佔2個位元組。long long等長最長(最長指在整型裡最長位元組數是8),佔8個位元組。
4)無符號修飾的基礎型別所佔空間大小不變,如int和usigned int。
5)指標型別對應編譯器位長。
測試程式碼如下:
/************************************************************************** * 檔名:size.c * * 作者:維西多莉 * * 功能:檢視C語言在32位編譯器環境下的基礎型別佔用的記憶體空間大小 * * 日期:2018/8/29 * **************************************************************************/ #include <stdio.h> #include <stdlib.h> int main() { char *c; int *i; double *d; long long *ll; printf("64位系統\n\r"); printf("char 佔記憶體:%d個位元組\n\r", sizeof(char)); printf("float 佔記憶體:%d個位元組\n\r", sizeof(float)); printf("double 佔記憶體:%d個位元組\n\r", sizeof(double)); printf("int 佔記憶體:%d個位元組\n\r", sizeof(int)); printf("unsigned int 佔記憶體:%d個位元組\n\r", sizeof(unsigned int)); printf("short int 佔記憶體:%d個位元組\n\r", sizeof(short int)); printf("long int 佔記憶體:%d個位元組\n\r", sizeof(long)); printf("unsigned long 佔記憶體:%d個位元組\n\r", sizeof(unsigned long)); printf("long double 佔記憶體:%d個位元組\n\r", sizeof(long double)); printf("long long 佔記憶體:%d個位元組\n\r", sizeof(long long)); printf("int 佔記憶體:%d個位元組\n\r", sizeof(int)); printf("------------------分割線----------------\n\r"); printf("char * 佔記憶體:%d個位元組\n\r", sizeof(c)); printf("double * 佔記憶體:%d個位元組\n\r", sizeof(d)); printf("int * 佔記憶體:%d個位元組\n\r", sizeof(i)); printf("long long * 佔記憶體:%d個位元組\n\r", sizeof(ll)); system("pause"); return 0; }
32位結果圖如圖2所示。
64位結果圖如圖3所示。