1. 程式人生 > >C語言的基礎型別的記憶體空間

C語言的基礎型別的記憶體空間

學習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  基礎型別佔用的記憶體空間

按表格總結:

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所示。

圖2  32位編譯器記憶體結果圖

64位結果圖如圖3所示。

圖3  64位編譯器記憶體結果圖