天天看點

C++成員函數的記憶體配置設定問題

轉載于:http://blog.csdn.net/caomiao2006/article/details/4934013?reload

靜态成員函數和靜态成員變量不屬于某個具體的對象,屬于類;

      也就是說在類加載(即程式初始化,類還沒有産生任何一個具體對象)的時候就已經為靜态成員函數在記憶體配置設定了代碼區空間;

      一個類所有的對象調用的成員函數都是同一個代碼段的; 

      當程式構造一個類的對象(第一次構造對象)時,就會給成員函數(非靜态成員函數)配置設定代碼區空間,之後構造的對象隻給非靜态的成員變量配置設定空間,都不給成員函數配置設定代碼區空間;當對象析構時也不釋放代碼區的空間(除非這個類的所有對象都析構了,才釋放這個這個類的非靜态成員函數的代碼區空間)。

對上述說法的更正:

       1、所有函數代碼都在程式編譯連接配接時放在一塊,稱為代碼區,無論是靜态還是非靜态函數都一樣,不存在 "構造一個類的對象(第一次構造對象)時,就會給成員函數(非靜态成員函數)配置設定代碼區空間 ",而是程式加載時,所有的代碼已在記憶體空間存在.   隻有函數中用到的局部變量才是函數調用時配置設定空間.

      2、靜态成員函數和成員函數之間根本的差別是:靜态成員函數實際上是一個全局函數,不依賴一個類的對象.函數定義時之是以把靜态成員函數定義在類中,是一種弱邏輯.     普通成員函數依賴一個類的對象,也就是它有this指針,必須指向一個類的對象.

      3、建立類的對象時隻是給成員變量配置設定空間,析構時也隻回收這些空間,代碼段裡的函數以及靜态函數和變量都是在程式結束後回收

繼續閱讀