結構體成員所占內存空間大小
一般情況下,如果想知道結構體成員的內存占用情況需要:
1、先用結構體在內存中開空間
2、使用sizeof(結構體變量.成員名)或者sizeof(結構體指針->成員名)的形式獲取成員在內存中所占空間大小,舉例如下:
#include#include
typedef struct{ int id; char ch;}data;
int main(){ data a; // 結構體變量 data *p = (data *)malloc(sizeof(data));
// 結構體變量用點語法 printf("方式一:成員id大小:%d,ch大小:%d\n", sizeof(a.id),sizeof(a.ch));
// 結構體指針用 -> printf("方式二:成員id大小:%d,ch大小:%d\n", sizeof(p->id),sizeof(p->ch));
return 0;}
此方法需要在內存中開辟空間。
在閱讀源碼的時候偶然發現了一種非常妙的寫法:可以將結構體指針強制指向地址為0的區域,然后直接用sizeof訪問成員。
printf("方法三:成員id大小:%d,ch大小:%d\n", sizeof(((data *)0)->id),sizeof(((data *)0)->ch));
地址為0的區域為保留區,程序運行時并不會真正在內存中開空間,這里可以理解為借用了0值。
為了通用,可以將這種方法進行宏定義:
#define size_of_attribute(Struct, Attribute) sizeof(((Struct*)0)->Attribute)
Struct --- 結構體類型名字
Attribute--- 結構體成員名測試代碼如下,你也快去試一下吧!
#include#include
#define size_of_attribute(Struct, Attribute) sizeof(((Struct*)0)->Attribute)
typedef struct{ int id; char ch;}data;
typedef struct{ double d; short m;}data2;
int main(){ printf("%d\n",size_of_attribute(data,ch)); printf("%d\n",size_of_attribute(data2,d)); return 0;}
-
內存
+關注
關注
8文章
3109瀏覽量
74992 -
源碼
+關注
關注
8文章
668瀏覽量
30143 -
結構體
+關注
關注
1文章
130瀏覽量
11033
發布評論請先 登錄
滲壓計在混凝土結構體中的安裝指南

充電接口你真的了解嗎?
C語言中結構體與聯合體的深度解析:內存布局與應用場景
采購GUTOR UPS備品備件,隱藏的“雷區” 你了解嗎?
你真的了解M12接頭A和D嗎?選型前必知的區別要點

字節豆包推出AI智能體耳機
服務器cpu占用率高怎么解決
【GD32 MCU 入門教程】六、GD32 MCU 選項字節設置及解除方法

評論