簡體   English   中英

32位CPU處理器中的內存泄漏,而64位處理器CPU中無泄漏

[英]Memory leak in 32 bit CPU processor and no leak in 64 bit processor CPU

我有一個C代碼,在64位CPU處理器中運行時沒有任何內存泄漏,但在32位處理器中卻顯示泄漏。 可能是什么原因。 GCC 4.1.2是編譯器,Debian是操作系統。

這聽起來很奇怪。 但這對我來說太模糊了。 由於您使用的是Linux,因此我建議您僅在Valgrind下運行32位版本,並最大程度地跟蹤內存。

請記住,即使您自己的代碼相同,您仍在運行兩個不同的程序-它們鏈接到不同的運行時庫。 可能是代碼的某些方面在一個運行時而不是另一個運行時觸發了泄漏。 如果真是這樣,它可能會以兩種方式之一發生:

a)你做得不好。 問題出在32位運行時中。

要么

b)您有問題,但是在64位運行時中有防御措施正在掩蓋它。

沒有代碼真的很難說。 可能出錯的事情

  • 隱式轉換。 在大多數地方,窄數據類型會轉換為有signedunsigned 如果您對它們的寬度有隱式假設,則可能有各種各樣的事情:溢出,未定義行為,編譯器特定行為
  • 缺少功能原型。 oldish C假定它不知道的函數返回一個int 如果實際上它返回一個指針(例如),則您有麻煩。
  • 指向int轉換的指針(或反之)

您的編譯器很舊。 如果可能的話,您可能應該嘗試獲取較新的內容,或者嘗試使用類似clang

編譯-Wall -Wextra ...上的所有警告,並處理您的代碼,直到完全沒有任何警告為止。

如果問題仍然存在,請使用valgrind運行,如@unwind建議。

然后有一個具體的問題,請回到這里,以便我們為您提供幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM