簡單點,非靜態成員變數占用空間,成員函式(無論是否是靜態的)則不占用空間:
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 structmystruct1;
和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...