C 成員函式的記憶體分配問題

2021-05-11 18:15:04 字數 647 閱讀 4190

靜態成員函式和靜態成員變數不屬於某個具體的物件,屬於類;

也就是說在類載入(即程式初始化,類還沒有產生任何乙個具體物件)的時候就已經為靜態成員函式在記憶體分配了**區空間;

乙個類所有的物件呼叫的成員函式都是同乙個**段的; 

當程式構造乙個類的物件(第一次構造物件)時,就會給成員函式(非靜態成員函式)分配**區空間,之後構造的物件只給非靜態的成員變數分配空間,都不給成員函式分配**區空間;當物件析構時也不釋放**區的空間(除非這個類的所有物件都析構了,才釋放這個這個類的非靜態成員函式的**區空間)。

對上述說法的更正:

1、所有函式**都在程式編譯連線時放在一塊,稱為**區,無論是靜態還是非靜態函式都一樣,不存在 "構造乙個類的物件(第一次構造物件)時,就會給成員函式(非靜態成員函式)分配**區空間 ",而是程式載入時,所有的**已在記憶體空間存在.   只有函式中用到的區域性變數才是函式呼叫時分配空間.

2、靜態成員函式和成員函式之間根本的區別是:靜態成員函式實際上是乙個全域性函式,不依賴乙個類的物件.函式定義時之所以把靜態成員函式定義在類中,是一種弱邏輯.     普通成員函式依賴乙個類的物件,也就是它有this指標,必須指向乙個類的物件.

3、建立類的物件時只是給成員變數分配空間,析構時也只**這些空間,**段裡的函式以及靜態函式和變數都是在程式結束後**。

C 成員函式的記憶體分配問題

1 所有函式 都在程式編譯連線時放在一塊,稱為 區,無論是靜態還是非靜態函式都一樣,不存在 構造乙個類的物件 第一次構造物件 時,就會給成員函式 非靜態成員函式 分配 區空間 而是程式載入時,所有的 已在記憶體空間存在.只有函式中用到的區域性變數才是函式呼叫時分配空間.2 靜態成員函式和成員函式之間...

c 類成員函式記憶體分配問題

靜態成員函式和靜態成員變數不屬於某個具體的物件,屬於類 也就是說在類載入 即程式初始化,類還沒有產生任何乙個具體物件 的時候就已經為靜態成員函式在記憶體分配了 區空間 乙個類所有的物件呼叫的成員函式都是同乙個 段的 當程式構造乙個類的物件 第一次構造物件 時,就會給成員函式 非靜態成員函式 分配 區...

C 類物件成員變數與成員函式記憶體分配問題

了解c 類位址的存放和分配等問題,能幫助我們更深入 更清晰了解類的組成及其使用。自己目前不是很清楚,先收集一些網上資料,而後再慢慢補充增加的了解.網路收集之 關於結構體和c 類的記憶體位址問題 今天終於有時間寫點東西了 太爽了 很多人都知道c 類是由結構體發展得來的,所以他們的成員變數 c語言的結構...