std :: deque를 사용하고 싶었지만 소비 된 오버 헤드 메모리가 너무 과도하게 보입니다. 내가 뭔가 잘못하고 있니? (32 비트 Windows 시스템에서)왜 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;
}
출력 :
40087552
72564736
보너스 질문 : 왜 MEM2 - MEM1 정확히 40000000?
당신은 올바르게했습니다. 마이크로 소프트가 잘못 했어. –
@MooingDuck Explain. –
@KonradRudolph : 음, Microsoft가 코드를 소유하고 있습니다. Dinkumware가 먼저 작성했습니다.'deque'는 GCC의 512에 비해 16 바이트의 블록을 사용합니다. 아주 작은 세트의 경우 오버 헤드가 훨씬 적습니다. 중형 또는 대형 세트의 경우 ... –