程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> 關於C++ >> xp下用戶程序空間分配(1):大致框架

xp下用戶程序空間分配(1):大致框架

編輯:關於C++

《windows核心編程》告訴我們,對於每個應用程序的4G虛擬空間可以分為4個大塊:

0x0000 0000 ~ 0x0000 ffff:空指針賦值分區

0x0001 0000 ~ 0x7ffe ffff:用戶模式分區

0x7fff 0000 ~ 0x7fff ffff:64K禁入分區

0x8000 0000 ~ 0xffff ffff:內核模式分區

但是再要具體點就需要自己研究了。

咱就來看看一個應用程序是怎麼使用這4G的空間的 。先寫段代碼查詢一下這4G空間中內存塊的大致分類:

SYSTEM_INFO info;
MEMORY_BASIC_INFORMATION mi;
HANDLE hProcess;
DWORD dwAddr;
MEMORY_BASIC_INFORMATION miBlock[1000];
int nCount = 0;
hProcess = GetCurrentProcess();
GetSystemInfo(&info);
dwAddr = (DWORD) info.lpMinimumApplicationAddress;
do
{
VirtualQueryEx(hProcess, (LPCVOID) dwAddr, &mi, sizeof(mi));
memcpy(&miBlock[nCount++], &mi, sizeof(mi));
dwAddr += mi.RegionSize;
} while(dwAddr < (DWORD) info.lpMaximumApplicationAddress);

print_block_table(miBlock, nCount);
……

在這種方式下,將可以得到249個內存塊,如下表所示(所有值均為 十六進制):

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved