Ochkarik
|
|
« Ответ #1 : 29-10-2005 15:44 » |
|
PagedPool - тот который может быть сброшен на диск, поэтому его нельзя использовать выше DISPATCH_LEVEL. (IRQL < DISPATCH_LEVEL) PagedPoolCacheAligned - тоже самое но выравненное на границу кэша проца.
NonPagedPool - этот находится в памяти всегда и не выгружается на диск. может использоваться на ВСЕХ IRQL. если не захватываешь слишком большой объем - рекомендую этот. НО! "The system can only allocate buffers larger than PAGE_SIZE from nonpaged pool in multiples of PAGE_SIZE. Requests for buffers larger than PAGE_SIZE, but not a PAGE_SIZE multiple, waste nonpageable memory. " NonPagedPoolCacheAligned - тодже но выравненое на границу кэша. - РЕКОМЕНДУЮ. честно говоря сам всегда использую NonPagedPoolCacheAligned. но если захватываешь совсем большой объем - проверь что тебе эту память отдали)) у меня выделяется с десяток областей по 2 мега) нормально... оперативки пол гига правда...
если не обрабатываешь память на DISPATCH_LEVEL - пользуйся PagedPoolCacheAligned.... подчти гарантия что тебе отдаюут любой объем, независимо от занятости памяти. (мне подчти не интересно, так как у меня вся обработка на DISPATCH_LEVEL)
NonPagedPoolMustSucceed и NonPagedPoolCacheAlignedMustS - не стоит. только при запуске виндов... это та пямять которая должна быть выделена палюбому... без которой можно сразу вешаться) в общем я такого не пользовал ни разу...
PS а вообще смотри DDK - POOL_TYPE. там все это написано) да! "When the system allocates a buffer from pool memory of PAGE_SIZE or greater, it aligns the buffer on a page boundary. Memory requests smaller than PAGE_SIZE are not necessarily aligned on page boundaries, but always fit within a single page, and are aligned on an 8-byte boundary."
|