我是Windows驱动程序开发的新手。我只是想知道,驱动程序中的全局变量将使用页面缓冲池内存还是非页面缓冲池内存?
谢谢和问候
Navaneeth
答案 0 :(得分:8)
取决于。非页面缓冲池应保留用于必须保留在RAM中的内存,因此如果您正在执行一些对磁盘操作的内存页面有影响的关键内容,则使用非分页。
有关详细信息,请参阅here。
看this(尽管它讨论的是c ++而不是C),默认情况下,全局变量可以通过#pragma定位。同样在this的第22页,我们看到了如何做到这一点。最后this discuss在这里我们看到默认情况下数据段应该是不可分页的。
答案 1 :(得分:2)
内核模式驱动程序中的全局变量是从NonPagedPool分配的。
您还可以使用设备扩展(当您调用IoCreateDevice时),它始终从NonPaged内存中分配。
我希望这有帮助, 马丁
答案 2 :(得分:0)
我发现的另一个很好的答案是:“非页面缓冲池是内核内存,当Windows用尽可用物理内存时,不能将其调出到页面文件中。驱动程序使用它来分配所需的内存。来自here