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

來源:互聯網
上載者:User
 C#類在什麼時候分配記憶體 

         一直以為記憶體配置是在調用建構函式的時候。現在發現我錯了。

 

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

 

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

 

所以我猜測記憶體在調用建構函式之前就分配好了,建構函式只是做一些初始化工作。

 

下面是我的測試:

 

 

      

        

 

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

 

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

 

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

 

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

 

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

 

 作者:陳太漢

 

 

 
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.