DELPHI除錯狀態出現「記憶體不足」的常規解決方法

2021-06-12 02:31:36 字數 979 閱讀 6547

在delphi的除錯環境中,如果出現多層的指標的巢狀的情況。舉個例子:

tpoint = packed record

x:double;

y:doiuble;

end;

ppoint = ^tpoint;

points = array of ppoint;

我們在訪問points的時候,使用的是for i:= 1 to points.count do

這種訪問的方式,如果是選擇的points的數量相對的大,在進行3次的訪問的迴圈訪問的時候,會出現「記憶體不足」。或者是當前的記憶體位址不能訪問的問題。

出現種種情況的主要原因是記憶體位址快速的賦值和訪問,系統的編譯環境的在監視記憶體的時候處理出現位址訪問出錯。

我們可以再舉個例子進行驗證,在我們的語音處理中,需要對語音碼流進行處理,比如我們在電腦的pci音效卡上出來的資料是pcm的聲碼,那麼這種編碼的碼流(二進位制資料)非常大,如果使用udp傳送的話,對固定記憶體段的不停訪問,在編譯環境中除錯的時候會出現「address  00001 not access ...」的報錯,很多的程式設計師在看到這種問題的時候是很鬱悶的,因為你的問題不在語法中,也很難制定具體的原因。 

這時候我們得到的結果是我們的這種方法不可行,於是開始換算法,換處理的方式,入加指標,加結構,固定記憶體段改為建立的記憶體等。

其實,大家需要注意乙個細節,就是你如果不用編譯環境除錯。用exe執行,會發現剛才的問題沒有出現。這是怎麼會事情呢,那就是我們delphi編譯器的特點決定的,delphi在處理編譯環境的除錯的時候,用來記憶體跟蹤消耗的資源比較的多。如果頻繁的對同乙個記憶體段(表面現象是對同乙個變數賦值)進行操作的時候,會出現記憶體位址不可用的報錯資訊。如果出現這個現象,不用著急。只需要用exe模式除錯即可。

當然exe的除錯模式是很不方便的,那你可以把這種頻繁的記憶體處理和訪問的內容方在dll中處理,這樣在執行的時候等同於exe,省略了我們在跟蹤除錯其他程式時候的報錯問題。

以上是delphi程式設計中的乙個細節問題,希望能幫助大家。

Linux記憶體拓展(記憶體不足SWAP解決方案)

swap是linux下的交換分割槽,類似windows的虛擬記憶體,當物理記憶體不足時,系統可把一些記憶體中不常用到的程式放入swap,解決物理記憶體不足的情況。若系統安裝時開闢的swap空間太小,可通過手動建立swap檔案。一 建立檔案 dd if dev zero of etc swapfile...

Delphi寫的資料同步程式提示「記憶體不足」

之前有做乙個資料同步程式,a庫是業務庫,b庫是臨時庫,臨時庫是給別人用的,裡面的錶比a庫少,也就2 30張,裡面有2張表,其他的都是普通資料表。我做好的同步程式的功能就是同步a庫中的業務資料到b庫,b庫沒有則新增,有則修改。但是從開始到前幾天一直有乙個表不能同步,到這個表就報記憶體錯誤,困擾了我一兩...

MTK解決記憶體不足的一些方法

下面提供了一些mtk解決記憶體不足的一些方法careyourself 發表於 2010 5 1 8 19 00sms phone entry 200 phb phone entry 500 1.方法一 減小 本的數量。現在手機可以支援的 本數量很大,最多都有750條,如果減到500條或者250條,可...