【发布时间】:2014-11-19 16:23:35
【问题描述】:
我对 VirtualAlloc 有点困惑,
我们可以使用 MEM_RESERVE 保留内存,然后使用 MEM_COMMIT 提交它,但是我对以下两个函数之间使用时的区别有点困惑:
m_pvData = VirtualAlloc(NULL, m_nBuffSize, MEM_COMMIT, PAGE_READWRITE);
m_pvData = VirtualAlloc(NULL, m_nBuffSize, MEM_RESERVE | MEM_COMMIT, PAGE_READWRITE);
二选一的好处是什么?
我可以使用下面的函数来获取缓冲区:
void* pdata = VirtualAlloc(NULL, 64*1024*1024, MEM_COMMIT, PAGE_READWRITE);
if (pdata == NULL)
{
cout<<"Last error is "<<GetLastError()<<endl;
}
没有错误
【问题讨论】:
-
因为第一个在技术上是不正确的。没有保留就不能提交。
-
但是我可以使用下面的函数来分配缓冲区,如下所示: void* pdata = VirtualAlloc(NULL, 64*1024*1024, MEM_COMMIT, PAGE_READWRITE); if (pdata == NULL) { cout
-
操作系统可以猜出你的意思。所以没有区别。
-
但是你应该通过这两个。不要让操作系统掩盖你的错误。总有一天,操作系统可能不再那么适应编程错误。
-
我明白了,谢谢你的帮助。原来操作系统是个好人
标签: memory virtualalloc