#pragma code_seg(INIT)/code_seg(PAGE)
轉自:http://blog.chinaunix.net/uid-24504987-id-161192.html
Windows規(guī)定有些虛擬內存可以交換到文件中,這類內存被稱為分頁內存
有些虛擬內存?永遠不會交換到文件中,這些內存叫非分頁內存
#define PAGEDCODE??code_seg(“PAGE”);//分頁內存
#define LOCKEDCODE??code_seg();//非分頁的
#define INITCODE??code_seg(“INIT”);
?
#define PAGEDDATA??data_seg(“PAGE”);
#define LOCKEDDATA??data_seg();
#define INITDATA??data_seg(“INIT”);
?
例:
如果將某個函數(shù)載入到分頁內存中,可用下列的函數(shù)
#pragma PAGEDCODE
VOID Fun()
{
??PAGED_CODE(); //do something
}
注意:???PAGED_CODE()是DDK提供的宏,只在check版本中生效,它會檢查這個函?數(shù)是否運行在低于DISPATCH_LEVAL的中斷請求,如果等于或高于這個中斷請求級,則產生一個斷言。當程序運行在DISPATCH_LEVEL之上時(包括本?層),程序只能使用非分頁內存,否則將導致藍屏死機
?
如果將某個函數(shù)載入到非分頁內存中,可用下列的函數(shù)
#pragma LOCKEDCODE
VOID Fun()
{
}
某個例程需要在初始化的時候載入內存,然后可以從內存中卸載掉,比如DriverEntry?情況下,DriverEntry會很大,占據(jù)很大的空間,為了節(jié)省內存,需要及時地從內存中卸載
#pragma INITCODE
NTSTATUS DriverEntry(
???IN PDRIVER_OBJECT pDriverObject,
???IN PUNICODE_STRING RegisterPath)
{//do something??}
總結
以上是生活随笔為你收集整理的#pragma code_seg(INIT)/code_seg(PAGE)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Centos7 下 zabbix服务安装
- 下一篇: 预处理指令 #pragma 的使用