我想使用std::deque,但是它占用的内存开销似乎过大。我有做错什么吗?
#include "windows.h"
#include "psapi.h"
#include <iostream>
#include <vector>
#include <queue>
int main (int, char* [])
{
PROCESS_MEMORY_COUNTERS pm;
GetProcessMemoryInfo(GetCurrentProcess(), &pm, sizeof(pm));
size_t mem1 = pm.WorkingSetSize;
std::vector<int> v( 10000000 );
GetProcessMemoryInfo(GetCurrentProcess(), &pm, sizeof(pm));
size_t mem2 = pm.WorkingSetSize;
std::deque<int> q( 10000000 );
GetProcessMemoryInfo(GetCurrentProcess(), &pm, sizeof(pm));
size_t mem3 = pm.WorkingSetSize;
std::cout << mem2 - mem1 << std::endl;
std::cout << mem3 - mem2 << std::endl;
return 0;
}
输出结果(在32位Windows系统上):
40087552
72564736
奖励问题:为什么mem2 - mem1不完全是40000000?
deque
使用的是16字节的“块”,而GCC使用的是512字节。对于非常小的集合来说,它的开销要少得多。但对于中等或大型集合来说…… - Mooing Duckstd::deque
并不是一个好主意。 - DavidRRvector
,这本书是后来完成的。 - Phil1970