任務管理器中的內存概念:
工作集(內存): 進程所佔用的總物理內存. 但是這個值是由兩部分組成, 即 '專用工作集' + '共享工作集'.
所以如圖,工作集內存 = 內存(專用工作集) + 內存(共享工作集)
內存(專用工作集)是程序獨佔的物理內存
內存(共享工作集)是程序與其它進程共享的內存,比如加載一個dll所佔用的內存
提交大小是程序獨佔的內存(包含物理內存和在頁面文件中的內存).
提交大小 = 內存(專用工作集) + 保存在頁面文件中的獨佔內存.
可以通過 `EmptyWorkingSet` 向操作系統發送請求, 將此進程的不常用的內容從物理內存中換出到換頁文件中保存
這個過程也就是虛擬內存技術
網上的一個例子:
char g_str[5*1024*1024];//全局變量,獨佔
const char STR[5*1024*1024];//常量,共享
void main()
{
char *p = (char*) HeapAlloc(GetProcessHeap(), 0, 1024*1024*5);//內存,獨佔
call_lib();
}
程序lib.dll定義了一個4M的全局變量,4M的常量,並申請了一個4M的內存,程序代碼大小爲1M.
char g_str[4*1024*1024];//全局變量,獨佔
const char STR[4*1024*1024];//常量,共享
void call_lib()
{
char *p = (char*) HeapAlloc(GetProcessHeap(), 0, 1024*1024*4);//內存,獨佔
}
Main.exe程序調用了lib.dll
所有的程序代碼所佔內存都是共享