C 類在什麼時候分配記憶體

2021-05-27 05:28:17 字數 1055 閱讀 1701

一直以為記憶體分配是在呼叫建構函式的時候。現在發現我錯了。

昨天在看c++的賦值運算時,想做一下筆記。乙個類賦值給另乙個類時,先呼叫建構函式,在給成員變數乙個個賦值,靜態成員變數不用賦值,因為靜態成員變數屬於類,被類的所有例項共享,所以不用被賦值,方法屬於類,不用被賦值,也賦不了值。

突然想到呼叫靜態的屬性或方法時不需要呼叫建構函式,因為呼叫建構函式只是產生乙個新的例項,靜態的屬性或方法屬於類嗎,呼叫它們根本不用產生例項,我突然想尖叫,不呼叫建構函式,怎麼分配記憶體,不分配記憶體類的屬性存**,連記憶體都沒有怎麼訪問它。

所以我猜測內存在呼叫建構函式之前就分配好了,建構函式只是做一些初始化工作。

下面是我的測試:

從圖中我們可以看出,在呼叫建構函式之前,成員變數已經初始化了,a=1,說明他們已經有屬於他們的記憶體了,不然a=1,s=1中的1往哪存,你不要告訴我說不需要記憶體。呼叫建構函式再對非靜態成員變數進行初始化。在呼叫靜態方法printstatic的過程中的確沒有呼叫建構函式,大家都知道不需要呼叫建構函式。靜態方法中只能呼叫靜態的方法和屬性,而屬性的定義,以及在定義的時候給乙個初值,都是在呼叫建構函式之前,一切都說明屬性在呼叫建構函式之前已經分配記憶體了,所以請不要說:內存在呼叫建構函式的時候分配。

乙個類占用的記憶體是多少?我是這樣認為的:

乙個類所佔的記憶體等於=屬性總記憶體+方法總記憶體+應用該類的指標所佔的記憶體+同步索引塊的大小。

屬性肯定是佔記憶體的,至於方法,應該也佔吧,不知道方法的記憶體首位址,怎麼訪問它。除了方法所在的記憶體,其他三個都是必須佔記憶體的,類中可以沒有方法嗎,所以將基本型別賦給object型別(裝箱),會多分配很多記憶體。

而這些所需的記憶體編譯器是非常清楚的,所以在呼叫建構函式之前呼叫完全可以分配記憶體。

C 類在什麼時候分配記憶體

一直以為記憶體分配是在呼叫建構函式的時候。現在發現我錯了。昨天在看c 的賦值運算時,想做一下筆記。乙個類賦值給另乙個類時,先呼叫建構函式,在給成員變數乙個個賦值,靜態成員變數不用賦值,因為靜態成員變數屬於類,被類的所有例項共享,所以不用被賦值,方法屬於類,不用被賦值,也賦不了值。突然想到呼叫靜態的屬...

C 類在什麼時候分配記憶體

一直以為記憶體分配是在呼叫建構函式的時候。現在發現我錯了。昨天在看 c 的賦值運算時,想做一下筆記。乙個類賦值給另乙個類時,先呼叫建構函式,在給成員變數乙個個賦值,靜態成員變數不用賦值,因為靜態成員變數屬於類,被類的所有例項共享,所以不用被賦值,方法屬於類,不用被賦值,也賦不了值。突然想到呼叫靜態的...

什麼時候需要動態分配記憶體?

我講解一下c語言中動態分配記憶體的函式,可能有些初學c語言的人不免要問了 我們為什麼要通過函式來實現動態分配記憶體呢?系統難道不是會自動分配記憶體嗎?既然有人會問這樣的問題,那麼我在這裡好好的講解一下吧!首先讓我們熟悉一下計算機的記憶體吧!在計算機的系統中有四個記憶體區域 1 棧 在棧裡面儲存一些我...