sizeof的一點總結


=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=--=

char str[] = "hello";
sizeof(str) = 6;

void *p = malloc(100);
sizeof(p) = 4;

數組和指針的sizeof運算有着細微的區別:如果數組變量被傳入函數中做sizeof運算,則和指針運算沒有區別!

=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=--=

struct S
{
   char c1;
   int i;
   char c2;
};
sizeof(S) = 12;

數位對齊規則:

=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=--=


class F
{
public:
	int a;
	static int b;
};

sizeof(F) = 4;
類靜態成員的空間不再類的實例中,而是像全局變量一樣在靜態存儲區中,被類共享


=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=--=
char str1[20] = "0123456789";
strlen(str1) = 10;
sizeof(str1) = 20;

strlen sizeof 的計算數組名大小方式

數組做參數傳遞給函數退化成指針,此時strlen() 仍爲實際大小,sizeof()則是指針大小 = 4;
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=--=

#pragma pack(2)

union u
{
	char buf[9];
	int a;
};

sizeof(u) = 10;

通過#pragma pack手動更改對齊方式爲2個字節;


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章