2013-04-22 2 views
1

Visual Studio를 사용하여 C++ 프로그램을 작성했으며 new 연산자를 사용하여 메모리를 할당한다고 가정 해 보겠습니다. 새로운 프로그램이 표준 4KB 페이지 대신 큰 페이지를 자동으로 사용하도록 만드는 방법이 있는지 궁금합니다. 즉, 프로그램에서 VirtualAlloc을 명시 적으로 호출하지 않아도됩니다.C++ new 연산자가 Windows에서 대형 페이지를 자동으로 사용할 수 있습니까?

감사합니다.

+4

을'N ew'는 4KB 페이지조차 사용하지 않습니다. HeapAllocate를 사용합니다. 4MB의 페이징 할 수없는 메모리를 할당하기 위해 32 바이트의 '새'코드를 사용하는 것은 불합리한 일입니다. 그것이 당신이 원하는 것이라면, 스스로해야 할 것입니다. –

+0

@ RaymondChen- 당신은 확실한가요? 그것은 새로운 것이 무엇입니까? 구현에 종속적이지 않습니까? – templatetypedef

+0

Windows 나 C++ 런타임 라이브러리 (또는 이와 비슷한 프로그램)가 C++ 프로그램의 힙을 관리합니까? 내 이해는 C++ 힙 관리자가 OS에서 페이지 (4K 이상)를 가져 와서 그 일부를 사용자의 C++ 프로그램에 할당한다는 것입니다. 그렇지 않니? –

답변

1

구현과 관련하여 다시 한번. 모든 라이브러리는 모든 표준이 AFAIK에 따르면 C++ 용 메모리를 새로 할당한다고 말하기 때문에 에 제한이 없습니다. Microsoft 구현을 위해 new는 항상 HeapAlloc를 호출합니다.

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

나의 이해는 가상 머신에서 실행하지 않는 한, OS가 기본 힙을 완벽하게 제어 할 수 있습니다 및 메모리 할당 스택이다. 위의 링크는 또한 레이몬드 (Raymond)의 질문에 대한 답변과 함께 좋은 점을 제시합니다. 큰 페이지를 사용해야합니까? 그렇게함으로써 내부 분열의 좋은 거래에 자신을 엽니 다.

3

신규 연산자를 모두 무시할 수 있습니다. 뿐만 아니라 예를

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

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

을 위해 당신이 운영자의 모든 변종를 오버라이드 (override) :

+0

그래, [여기] (http://stackoverflow.com/questions/7194127/how-should-i-write-iso-c-standard-conformant-custom-new-and 참조) -delete-operators? lq = 1) 올바른 방법을 수행하는 방법에 대한 자세한 내용을 참조하십시오. 당연히, 당신은 큰 페이지를 사용하기 위해'VirtualAlloc'을 호출하기를 원할 것입니다. –

관련 문제