C 中類和結構體在記憶體中的儲存問題

2021-06-21 21:50:48 字數 1060 閱讀 2980

簡單點,非靜態成員變數占用空間,成員函式(無論是否是靜態的)則不占用空間:

class  myclass;

myclass類的例項中:

占用2*4=8個位元組 (即a b這兩個成員)

涉及虛函式表那些你在另外研究。

c++中struct和class在計算物件大小時你就不用區別了,計算方法一樣。

就拿你的例子來說

一,int a; //類的成員變數,當類例項化後占用記憶體空間

float b; //同上

static int c; //處於靜態資料記憶體區,程式執行後同一分配,與類的例項化與否無關

二,函式的位址存在於**區,不占用物件記憶體。

但是對於含有虛函式的類來說,例項化後的物件中必定會有乙個指向虛函式表的指標,

占用乙個指標的空間。

三,myclass *myclass; //在棧上分配乙個指標,但你不知道它指向**,因為沒有給它賦值。

如果是myclass *myclass = new myclass; 這樣,在堆記憶體上建立了乙個myclass型別的物件,

完成了記憶體的分配,就可以通過這個指標訪問int a,float b,以及fun1()之類的成員變數了。

四,占用空間大小的話class和struct應該是相同的,不過這裡有個位元組對齊的概念

typedef struct

mystruct;

和typedef struct

mystruct;

例項化後所佔的記憶體空間是不一樣的,有興趣可以去了解一下。

注:

typedef struct

mystruct1;

和typedef struct

mystruct2;

sizeof(mystruct1) = 12 , sizeof(mystruct2) = 8

32位系統一般是4位元組對齊,不滿4個位元組會自動補足。

結構體在記憶體中的儲存方式

乙個結構體變數定義完之後,其在記憶體中的儲存並不等於其所包含元素的寬度之和。例一 include using namespace std struct x s1 int main 在例一中的結構體變數s1定義之後,經測試,會發現sizeof s1 16,其值不等於sizeof s1.a 1 size...

結構體在記憶體中對齊

剛剛完成乙個檔案的遷移程式,其中遇到了結構體對齊的問題,所以拿出來說說,與各位博友們分享。我的程式很簡單,就是把之前通過乙個結構體 fwrite 到檔案 a 裡的內容讀出,然後轉給另乙個結構體儲存。程式是簡單,但我擔心的是之前把結構體 fwrite 到檔案 a 的程式對齊結構體規則是怎樣的?一定要知...

結構體在記憶體中的對齊規則

結構體在記憶體中的對齊規則 標籤 儲存 struct 測試iostream c2011 11 15 19 32 4717人閱讀 9 收藏 舉報乙個結構體變數定義完之後,其在記憶體中的儲存並不等於其所包含元素的寬度之和。例一 include using namespace std struct x c...