c ++ new运营商可以在Windows上自动使用大页面吗?

时间:2013-04-22 20:49:44

标签: c++ windows memory-management

假设我使用Visual Studio编写了一个C ++程序,它使用new运算符来分配内存。我想知道是否有一种方法可以让new自动使用大页面而不是标准的4KB页面(即,我的程序没有显式调用VirtualAlloc)。

感谢您的时间。

2 个答案:

答案 0 :(得分:3)

您可以覆盖所有删除运算符。例如

void * operator new(size_t size)
{
    return malloc(size);
}

void operator delete(void * pointer)
{
    free(pointer);
}

同样,您应该覆盖此运算符的所有变体:

答案 1 :(得分:1)

  

具体实施,再次。所有图书馆都不受限制   这样做是因为所有标准都说AFAIK是新的分配   C ++的内存。对于Microsoft的实现,新的总是调用   HeapAlloc。

http://cboard.cprogramming.com/cplusplus-programming/98364-new-invokes-virtualalloc.html

我的理解是,除非您在虚拟机中运行,否则操作系统可以完全控制默认堆和堆栈内存分配。以上链接也提出了一个与Raymond对您的问题的回答一致的好处:您确定需要使用大页面吗?通过这样做,你可以打开自己的大量内部碎片。