iT邦幫忙

1

C++與C#的記憶體配置

小魚 2017-07-21 07:33:4321424 瀏覽

這篇文章是我自己的心得,
也歡迎大家可以一起討論。

以前在寫C++的時候,
比較不喜歡用動態配置記憶體的方式,
C++寫一個class呼叫只有用

ClassName myName;

的方式呼叫就可以了,
只要在建構子寫好預設值就可以了,
如果有new的到後來一定要delete掉,
要不然會有占用記憶體的問題,
似乎程式關掉也不會釋放,
一定要重新開機才會釋放。

可是後來開始用C#,
除了C#原本自訂的類別之外,
自己寫的類別都要用

ClassName myName = new ClassName();

即使有在建構子寫好預設值,
如果沒有new就沒辦法用,
可以編譯但執行會出錯,變數會變成null
聽說C#會自己釋放記憶體,
不過其實微軟的東西有時候會覺得怕怕的,

另外還有遇到一種狀況,
在做某些比較龐大的資料處理的時候,
有時候會發生Out Of Memory的情況,
64位元的程式也是會這樣,
可是用記憶體偵測的程式來看,
記憶體也沒有真的增加那麼多,
看起來還是維持在跟原本差不多最多高一點點的情況,
那到底為什麼會有Out Of Memory的情況發生呢?

一點點心得,
如果大家願意討論的話歡迎來交流。


圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 則留言

0
石頭
iT邦高手 1 級 ‧ 2017-07-21 11:46:48

其實一般撰寫程式需要自己要去掌控物件的生存時間

c#和java不用自己來銷毀是因為有GC
GC說明
GC會定時一段時間把[參考類型的物件]為NULL銷毀

而版主遇到的Out Of Memory狀況
可能這個程式使用的記憶體大小超過系統配置的大小
例如系統配置給這個程式128MB記憶體
但您使用超過128MB所以就報Out Of Memory

小魚 iT邦大師 1 級 ‧ 2017-07-21 12:40:34 檢舉

恩恩, 這是有可能,
不過我有辦法增加系統配置給這個應用程式的記憶體大小嗎?

GC是嗎?
有空要來研究一下了.
/images/emoticon/emoticon33.gif

我要留言

立即登入留言