首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

C malloc 分配超過物理內存:虛擬內存機制導致 4GB 機器分配 5GB+

     編輯:程式設計綜合問答

現象

4GB 物理內存機器上循環 malloc(100MB) 成功分配 5100 MB 才失敗,每次結果略異。

原因

現代操作系統(Windows/Linux)使用虛擬內存:

  • malloc 僅預留虛擬地址空間,不立即分配物理頁框。
  • 實際寫入數據時觸發缺頁中斷,OS 再分配物理內存(或交換到頁文件/交換分區)。
  • 32 位進程虛擬地址空間上限 2GB/3GB(Windows 默認 2GB),64 位進程理論 128TB,受限於頁文件大小與過程提交限制。

驗證


// 寫入每個頁確認物理提交
char *p = malloc(100*1024*1024);
for (size_t i=0; i<100*1024*1024; i+=4096) p[i] = 0; // 強制提交

若立即寫入,分配量將接近物理內存+頁文件上限。

內存洩漏檢測

  • Windows: GetProcessMemoryInfo (PSAPI) 獲取 WorkingSetSize (工作集) 與 PagefileUsage。
  • Linux: 讀取 /proc/self/status 中 VmRSS、VmSize。
  • 工具: Visual Studio 診斷工具、Valgrind (Linux)、Dr. Memory (跨平台)。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved