0
下考慮下面的代碼片斷:無法測量造成的std ::矢量<> ::保留存儲器分配視窗
void OutputMemoryStatus()
{
PROCESS_MEMORY_COUNTERS pmc;
GetProcessMemoryInfo(::GetCurrentProcess(), &pmc, sizeof(pmc));
std::cout << pmc.WorkingSetSize/(1024.0 * 1024.0) << std::endl;
}
int main()
{
std::vector<int> vec;
OutputMemoryStatus();
vec.reserve(100'000'000);
OutputMemoryStatus();
std::cout << vec.capacity() << std::endl;
for (int i = 0; i < 1'000'000; ++i)
vec.push_back(i);
OutputMemoryStatus();
}
的輸出是下面的:
Memory used: 3.11328
Memory used: 3.20703
Capacity: 100000000
Memory used: 7.03516
所以似乎儘管保留了400 MB的內存,這是通過調用capacity()來確認的,但Windows並不認爲這個內存是分配的,但是當我們實際上用1'000'000的值填充向量時,該內存(4MB)被視爲已分配。
如何解釋?
我正在使用Visual Studio 2015,Release配置,x86平臺。
UPDATE
現在,編譯器不知道使用的內存的實際數量,但如果我輸入大小= 1'000'000,其結果是,因爲它以前一樣。
int size;
std::cin >> size;
std::vector<int> vec;
OutputMemoryStatus();
vec.reserve(100'000'000);
OutputMemoryStatus();
std::cout << "Capacity: " << vec.capacity() << std::endl;
for (int i = 0; i < size; ++i)
vec.push_back(i);
OutputMemoryStatus();
@KerrekSB是不是'OutputMemoryStatus();'做了什麼?他們在for循環之後調用它。 – NathanOliver
@KerrekSB用另一個電話更新了問題。 – undermind
@undermind:謝謝 - 現在這是一個真正的問題:-) –