1.每個進程都有自己專有的地址空間,當進程中的各線程運行時,他們只能訪問屬於該進程的內存,線程看不到且無法訪問其他進程的內存。地址空間只是一個內存地址區間,需要把物理存儲器分配或映射到相應的地址空間,才能夠正常讀寫數據。
2.進程地址空間的劃分及使用
空指針賦值區 00000000-0000FFFF 禁止訪問,幫助程序員捕獲空指針的賦值。
用戶模式分區 00010000-7FFEFFFF 進程大部分數據保存之處,所有exe和dll都載入這一區域,每個進程都可能將dll載入到 分區的不同地址,系統同時會把該進程可以訪問的所有內存映射文件映射到這一分區。
64KB禁入分區 7FFF0000-7FFFFFFF
內核模式分區 80000000-FFFFFFFF 操作系統代碼的駐地。如線程調度,網絡支持,設備驅動等待。禁止讀寫。所有進程共 有。
3.地址空間的區域
分配區域的操作成爲預訂。分配區域起始地址爲分配粒度通常爲64k的整數倍。分配大小爲系統頁面大小的整數倍通常爲4KB的整數倍。
4.給區域調撥committing物理存儲器
物理存儲器始終都以頁面爲單位來調撥。不必給整個區域調撥,可以個任意的頁面調撥。即請求頁式交換算法
5.虛擬內存:每個進程都擁有的獨佔的地址空間4G。
頁面交換文件:系統執行頁面調度算法時,將內存的數據塊備份到頁面交換文件,在對這塊內存進行修改利用。
交換區:物理內存大小+頁面交換文件大小.
6.內存映射文件
硬盤文件---分配地址空間---調撥物理內存
7.DLL注入:將DLL注入到進程的地址空間中。