類是建立物件的模板,並不占用記憶體空間,不存在於編譯後的可執行檔案中;用類建立物件後,物件被例項化,是實實在在的資料,需要記憶體來儲存。物件被建立時會在棧區或者堆區分配記憶體。
建立多個物件,不同的物件的成員變數的值可能不同,需要單獨分配記憶體來儲存。但是物件的成員函式的**是一樣的,對成員變數的操作是一樣的,
所以成員函式的**可以壓縮成乙份,這樣節省了很多的空間。實際上,編譯器就是這樣做的,編譯器將成員變數和成員函式分開儲存,分別為每個物件的成員變數分配記憶體,但是所有物件共用一段函式**。
如下圖所示;
成員函式在棧區或堆區分配記憶體,成員函式在**區分配記憶體。
通過siezeof()來求物件所占用的記憶體大小,測得的結果實際上就是成員變數所占用的大小,並沒有將成員函式所占用的大小計算進去。
如下程式:
由執行截圖結果可以看出,物件所佔的空間大小為成員變數所佔空間的大小。
c 記憶體模型
1 棧區 由編譯器自動分配和釋放,存放函式的引數數值,區域性變數的值 其操作方式類似於資料結構中得棧 2 堆區一般由使用者分配和釋放,若使用者不釋放,程式結束時候由os 它與資料結構中堆是兩回事,分配方式類似鍊錶 3 全域性區 靜態區 static全域性變數和靜態變數的存放區域。初始化的全域性變數和...
C 記憶體模型
1.在c 中,不要在標頭檔案中進行變數宣告。因為單定義規則的存在,不同原始檔中對於同乙個全域性變數只能夠定義一次。因此如果在標頭檔案中包含變數定義,那麼很有可能使用相同標頭檔案的原始檔會對這個變數產生多次定義。2.new 與 delete等通過動態分配記憶體產生的資料將儲存在堆 heap 中。3.在...
C記憶體模型
程式執行時作業系統把磁碟的 load到記憶體,然後分配給該程序乙個記憶體空間,分為堆區,棧區,全域性區和 區如圖1所示。作業系統找到main函式開始執行程式。圖1 記憶體模型 區 存放程式的二進位制 全域性區 全域性變數和靜態變數。初始化的全域性變數和靜態變數在一塊區域,未初始化的全域性變數和未初始...