我有一個Visual Studio 2008 C++程序,我正在使用內存池的地址填充std::list
。尋找快速填充std :: list的方法
我有一個使用std::generate
工作的實現,它並不壞,但是對於大型小分配塊池可能會有點慢。
/// fill the allocation list with the memory addresses of each block
struct fill
{
fill(void* start, ulong alloc)
: start_(start),
alloc_(alloc),
count_(0)
{
};
void* operator()()
{
return (void*)((ulong) start_ + (count_++) * alloc_);
}
/// starting address
void* start_;
/// size of the blocks
ulong alloc_;
/// internal counter
int count_;
}; // struct fill
ulong begin = 0; // beginning address
ulong max_size = 0x1000; // maximum memory pool size (4KB)
ulong block_size = 0x20; // size of each memory block (32B)
std::list< void* > memory;
memory.resize(max_size/block_size); // 128 memory blocks
std::generate(memory.begin(), memory.end(), fill(begin, block_size));
我只是想知道是否有人有更快或更有效的填充鏈表。
感謝, PaulH
你爲什麼使用'list'而不是'vector'? * slow *究竟意味着什麼?您正在分配128個小塊內存。不管數據結構如何,這應該是非常快的。 – 2011-05-18 13:45:10
這項工作似乎被誤導了。 'std :: list'會爲每個節點做自己的分配,所以你的內存池不會爲你節省任何東西(它可能會比正常的分配慢) – interjay 2011-05-18 13:47:52
它與列表沒有嚴格關係,但是你認爲loki小對象分配? – 2011-05-18 13:51:52