??????? 題目描述很簡(jiǎn)單:內(nèi)存泄露了,現(xiàn)象是看到該程序的內(nèi)存占用率不斷增長(zhǎng),作為一個(gè)程序員你怎么解決這個(gè)問(wèn)題?
??????? 我答的不好,回來(lái)之后又好好的想了想,其實(shí)回答這個(gè)問(wèn)題應(yīng)該從不同的方面來(lái)考慮
??????? 首先分析內(nèi)存泄露容易發(fā)生的情況,《OOP啟示錄》對(duì)這些情況都講得挺詳細(xì)的,在類的構(gòu)造函數(shù)與析構(gòu)函數(shù)中沒(méi)有匹配地調(diào)用 new/delete!沒(méi)有正確地清除嵌套的對(duì)象指針!在釋放對(duì)象數(shù)組時(shí),沒(méi)有使用delete [];指向由指向?qū)ο蟮闹羔槝?gòu)成的數(shù)組不等同于與對(duì)象數(shù)組。缺少拷貝構(gòu)造函數(shù),編譯器缺省添加的拷貝構(gòu)造函數(shù)不足,缺省的拷貝構(gòu)造函數(shù)采用位拷貝!......用我自己的想法描述就是,每次自己分配一塊內(nèi)存區(qū)域的時(shí)候,都要想到用完之后要將該內(nèi)存區(qū)釋放掉!當(dāng)然特殊的情形這句話不適用。
?????? 既然知道了內(nèi)存泄露事件的多發(fā)地帶,我們可以多在這些地方設(shè)置檢察機(jī)制,相對(duì)來(lái)說(shuō)就有一點(diǎn)針對(duì)性了!面試官說(shuō)這樣是一種解決辦法,可能10000個(gè)函數(shù),我們可以把錯(cuò)誤范圍縮小到200個(gè),然后你還有什么辦法繼續(xù)解決這個(gè)問(wèn)題?
??????我基本上是把我暫時(shí)能想到的都說(shuō)了,什么設(shè)置斷點(diǎn)調(diào)試啊,用IDE工具看地址變化。。。不過(guò)好像都不能達(dá)到面試官滿意度。。。
????? 他說(shuō)沒(méi)有這樣的IDE工具給你用,接著你怎么解決?
????? 唉。。。受打擊了,事實(shí)如此,我對(duì)這個(gè)不夠理解。。。
???? 之后上網(wǎng)想找找內(nèi)存泄露相關(guān)的資料,搜出來(lái)的文章大部分都是林銳高質(zhì)量C++編程里關(guān)于內(nèi)存的那篇,大感失望,怎么就沒(méi)有其他更好更深入的文章了呢???
???? 大家討論討論,我相信這個(gè)問(wèn)題挺具有代表性的,大家討論出個(gè)結(jié)果,都弄懂了豈不是更好?
posted on 2006-05-13 02:42
季浩 閱讀(2180)
評(píng)論(10) 編輯 收藏 引用 所屬分類:
心得體會(huì)