имеет ли смысл использовать для 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);
}
};
PS: исключительно для Win32. О портах речь не идет.
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 YegorushkinPosted via RSDN NNTP Server 1.9
Хорошо, для связанных списков все ясно. а как насчет линейных? типа string или vector?