대용량 메모리 (메가 바이트)를 큰 정렬 (잠재적으로 메가 바이트 범위)으로 할당해야합니다. VirtualAlloc 함수 제품군은이를 수행하는 옵션을 제공하지 않는 것 같습니다.큰 정렬을 사용하는 Win32 메모리 할당
Linux에서이 작업을 수행하기 위해 필요한 것은 더 큰 영역을 mmap하는 것입니다. 필요한 정렬이있는 충분히 큰 영역이 포함될 것임을 보장하기에 충분합니다. 그런 다음 영역의 시작과 끝 부분을 munmap합니다. 필요하지 않은 큰 지역.
예를 들어, 1 메가 바이트 경계 (즉, 가장 낮은 20 비트에서 0을 갖는 영역의 시작)에서 정렬 된 4MB가 필요하다고 가정 해 보겠습니다. 나는 5 메가 바이트 mmap 줄. 0x44ff000-0x49ff000의 영역을 얻는다 고 가정 해 봅시다. 해당 영역 내에는 1 메가 바이트 경계에 정렬 된 0x4500000-0x4900000 영역이 있습니다. 그러면 0x44ff000-0x4500000과 0x4900000-0x49ff000을 munmap합니다.
Win32에서도 이와 비슷한 작업을 수행 할 수 있습니까? PAGE_NOACCESS와 함께 VirtualProtect를 사용하면 메모리가 해제됩니까? 더 나은 해결책이 있습니까?
* 가상 메모리에 대한 정렬 요구 사항이 매우 이상한 경우 물리적 메모리에만 문제가됩니다. Anyhoo, Windows에서 할 수있는 일은 없습니다. 하지만 할당은 * 예약해야하기 때문에 중요하지 않습니다. 커밋은 별도의 단계입니다. 특정 행복한 주소에 할당을 요청하는 것도 가능합니다. VirtualAlloc()을 사용하십시오. –