Re: dwAllocationGranularity & alignment
От: sz_ Россия  
Дата: 07.03.09 09:54
Оценка:
Здравствуйте, McSeem2, Вы писали:

MS>GetSysInfo() позволяет узнать dwAllocationGranularity и dwPageSize. Вопрос в том, каков алаймент гарантирован? PageSize или AllocationGranularity? Как я понимаю, если PageSize=4K, а AllocationGranularity=64K то VirtualAlloc с флагом MEM_COMMIT при запросе в 4K все равно даст 64K. Это так? Если так, то алаймент должен быть гарантирован на 64K. Я посмотрел, какие адреса он возвращает — всегда младшие 16 бит — нули, то есть выровнено на AllocationGranularity. Но уверенности в этом нет. А чтобы оперировать со страницами в 4K требуется уже вручную разруливать ситуацию с MEM_RESERVE, MEM_COMMIT и MEM_DECOMMIT.


MS>То есть, вызов ptr = VirtualAlloc(0, size, MEM_RESERVE|MEM_COMMIT, PAGE_READWRITE);


MS>Какой алаймент железно гарантирован в ptr? dwAllocationGranularity или dwPageSize?


Читай описание первого параметра VirtualAlloc:

The starting address of the region to allocate. If the memory is being reserved, the specified address is rounded down to the nearest multiple of the allocation granularity. If the memory is already reserved and is being committed, the address is rounded down to the next page boundary.

 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.