【发布时间】:2009-04-28 08:41:56
【问题描述】:
我是 Windows 驱动程序开发的新手。我只是想知道,驱动程序中的全局变量将使用分页池内存还是非分页池内存?
感谢和问候
纳瓦内斯
【问题讨论】:
标签: windows-xp kernel device-driver
我是 Windows 驱动程序开发的新手。我只是想知道,驱动程序中的全局变量将使用分页池内存还是非分页池内存?
感谢和问候
纳瓦内斯
【问题讨论】:
标签: windows-xp kernel device-driver
视情况而定。非分页池应保留用于必须保留在 RAM 中的内存,因此,如果您正在执行可能受磁盘操作中的内存页面影响的关键操作,请使用非分页。
请参阅here 了解更多信息。
看看this(尽管它讨论的是c++而不是C),默认情况下,全局变量似乎可以通过#pragma定位。同样在this 的 p22 上,我们看到了如何做到这一点。最后this discuss这里我们看到数据段默认是不可分页的。
【讨论】:
内核模式驱动程序中的全局变量是从 NonPagedPool 分配的。
你也可以使用设备扩展(当你调用 IoCreateDevice 时),它总是从非分页内存中分配的。
我希望这会有所帮助, 马丁
【讨论】:
我找到的另一个很好的答案是:“非分页池是内核内存,当 Windows 用完可用物理内存时,它不能被分页到页面文件中。驱动程序使用它来分配他们需要的内存。”来自here
【讨论】: