stl::allocator VirtualAlloc
От: JakeS  
Дата: 07.01.05 22:06
Оценка:
имеет ли смысл использовать для stl контейнеров в часности для строк аллокатор вида:
template<class _Ty>
class w32Allocator : public std::allocator<_Ty>
{
    void deallocate(pointer _Ptr, size_type) {    // deallocate object at _Ptr, ignore size
        VirtualFree(_Ptr, 0, MEM_FREE);
    }
    pointer allocate(size_type _Count) {    // allocate array of _Count elements
        return (pointer)VirtualAlloc(NULL, sizeof(_Ty) * _Count, MEM_COMMIT | MEM_RESERVE, PAGE_READWRITE);
    }
};
Re: stl::allocator VirtualAlloc
От: JakeS  
Дата: 07.01.05 22:08
Оценка:
PS: исключительно для Win32. О портах речь не идет.
Re: stl::allocator VirtualAlloc
От: Сергей Мухин Россия  
Дата: 07.01.05 22:46
Оценка:
Здравствуйте, JakeS, Вы писали:

JS>имеет ли смысл использовать для stl контейнеров в часности для строк аллокатор вида:

вот кусочек из описания VirtualAlloc

dwSize
[in] The size of the region, in bytes. If the lpAddress parameter is NULL, this value is rounded up to the next page boundary. Otherwise, the allocated pages include all pages containing one or more bytes in the range from lpAddress to (lpAddress+dwSize). This means that a 2-byte range straddling a page boundary causes both pages to be included in the allocated region.

я думаю это достаточно?
---
С уважением,
Сергей Мухин
Re: stl::allocator VirtualAlloc
От: MaximE Великобритания  
Дата: 07.01.05 23:57
Оценка:
JakeS wrote:

> имеет ли смысл использовать для stl контейнеров в часности для строк аллокатор вида:

>
> template<class _Ty>
> class w32Allocator : public std::allocator<_Ty>
> {
>     void deallocate(pointer _Ptr, size_type) {    // deallocate object at _Ptr, ignore size
>         VirtualFree(_Ptr, 0, MEM_FREE);
>     }
>     pointer allocate(size_type _Count) {    // allocate array of _Count elements
>         return (pointer)VirtualAlloc(NULL, sizeof(_Ty) * _Count, MEM_COMMIT | MEM_RESERVE, PAGE_READWRITE);
>     }
> };
>


VirtualAlloc работает со страницами. На x86 стандартный размер страницы — 0x1000 байт. Т.е. для каждого элемента такой алокатор будет выделять как минимум страницу.

Используй HeapAlloc. Теория: http://msdn.microsoft.com/library/en-us/dngenlib/html/heap3.asp

--
Maxim Yegorushkin
Posted via RSDN NNTP Server 1.9
Re[2]: stl::allocator VirtualAlloc
От: JakeS  
Дата: 08.01.05 00:36
Оценка:
Хорошо, для связанных списков все ясно. а как насчет линейных? типа string или vector?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.