2015-06-03 34 views
-1

難道是在所有可能的(我不關心實用性和有效性)編寫監控在下面的,很基本的方式內存使用C或C++程序?假設的內存使用情況監測計劃


鑑於聲明一個變量不分配一個值導致它具有一切已經在其存儲單元的值,我們可以創建一個大陣(數千或數百萬元素),並留下所有的值未分配。然後,看看是否有這些元素被覆蓋,我們只需要重複比較它們的當前值和以前的值。


我非常懷疑這會像我上面所說的那樣簡單。假設我的懷疑是有根據的,那麼問題會出在哪裏?更重要的是,我們可以用一些有創意或深奧的代碼繞過它嗎?我想這個問題可能歸因於聲明的未初始化元素的某些內容不允許其他系統進程寫入其內存地址。請給我一些指點! (heehee)謝謝。

+3

[指針?](http://xkcd.com/138/) – Levi

+1

如果您指的是我的最後一句話,那是一個雙關語,其中「指針」的意思是「提示或建議」:P –

+0

您是談論代碼檢測? – perencia

回答

1

可以說你的程序在C 創建一個大陣列僅限於允許空閒內存以及操作系統限制你的程度。

所以我們可以說您創建了一個相當大的陣列(未初始化)。 現在,內存被分配給您的進程(您運行的程序),其他進程無法訪問它! (這是避免這種情況的操作系統角色,虛擬化的基本要求)。

所以當沒有其他進程可以訪問它的值不會一旦其分配給你變了。

+0

難道可以讓我解除分配內存(或任何期限是流程,消除進程的所有權),仍然監測它隨時間的任何變化? –

+1

否。一旦將內存釋放回操作系統,您將無法訪問它。 –

+1

您可以分配然後記下該值,然後釋放內存,但問題是,當你將嘗試監視值(目前該區域沒有分配給你),你會得到一些錯誤,你的程序將最有可能終止(分段錯誤)這是因爲通過檢查這些內存位置的值,您試圖訪問未分配給您的位置,並且操作系統嘗試避免未分配給它的進程訪問內存。 –