我們都知道在例項化類得到物件時,系統會為類內的資料成員和成員函式分配儲存空間
但是如果我們用同乙個類例項化多個物件呢?那麼是不是系統要為每乙個物件中的成員函式分配儲存空間?實際上不是這樣的!
當例項化類得到物件時系統只為物件的資料成員分配記憶體空間,而將類的成員函式放在另乙個公共的區域。所以,無論例項化多少的物件,物件中的成員函式只有乙份。
可以通過如下程式驗證以上觀點:
#include
using namespace std;
class test
{public:
void show()
{cout<<"this is a test!"《程式執行的結果為:
the size of test is: 1
可以看到程式執行後輸出的結果為1,正好是物件中char型資料成員的大小。這也就驗證了物件所佔的空間的大小取決於物件的資料成員而與成員函式無關
C 類成員函式的儲存方式 C 類成員
對於類的大小,我們發現類內成員函式並不存在於類的儲存空間。這引發了我們的思考,類中的函式成員儲存在什麼地方?資料成員每個物件會有乙份,函式成員會不會也是這樣呢?include using namespace std class time private int hour int minute int...
C 中類的資料成員和成員函式記憶體分布
對齊理由 1 移植原因。某些平台只能在特定位址處取特定資料值。2 效能原因。訪問未對齊的記憶體,處理器需要額外的訪問次數。有的平台從偶位址開始讀,如果資料從奇位址開始讀,那麼需要訪問兩次。跟物理性質有關,記憶體分一塊一塊等大小的,盡量將單個資料儲存在乙個物理儲存上,便於電訊號讀取。1 空型別 cla...
C 成員函式和成員變數儲存說明
c 中類的成員函式和成員變數的儲存方式是不一樣的。比如定義物件是系統會為物件分配儲存空間,其中只為成員變數分配了儲存空間,而成員函式則存放在公共的 段中。如下圖所示 因此可以看出,每個物件占用的儲存空間只是該物件的資料部分 虛函式指標和虛基類指標也屬於資料部分 所占用的儲存空間,而不包括成員函式所占...