是否有可能在標準 C++ 11沒有崩潰的系統(x86,x64,PowerPC/Windows,Linux或MacOS)上獲取剩餘的可用內存?獲取標準C++ 11中剩餘的可用內存?
一個天真的方法是嘗試通過分配過大的尺寸開始非常大的陣列中,捕獲異常,每次它失敗,直到沒有異常被拋出減小尺寸。但是,也許還有一個更有效的/聰明的方法...
編輯1:其實我並不需要的內存的確切數額。我想知道大約(100MB的錯誤欄)我的代碼在啓動時可以使用多少。
編輯2: 你覺得這個代碼是什麼?在我的程序開始時運行它是否安全,否則可能會損壞內存?
#include <iostream>
#include <array>
#include <list>
#include <initializer_list>
#include <stdexcept>
int main(int argc, char* argv[])
{
static const long long int megabyte = 1024*1024;
std::array<char, megabyte> content({{'a'}});
std::list<decltype(content)> list1;
std::list<decltype(content)> list2;
const long long int n1 = list1.max_size();
const long long int n2 = list2.max_size();
long long int i1 = 0;
long long int i2 = 0;
long long int result = 0;
for (i1 = 0; i1 < n1; ++i1) {
try {
list1.push_back(content);
}
catch (const std::exception&) {
break;
}
}
for (i2 = 0; i2 < n2; ++i2) {
try {
list2.push_back(content);
}
catch (const std::exception&) {
break;
}
}
list1.clear();
list2.clear();
result = (i1+i2)*sizeof(content);
std::cout<<"Memory available for program execution = "<<result/megabyte<<" MB"<<std::endl;
return 0;
}
對不起,這次「可能」的兩個可能結果中的「否」已經出來。 – 2013-02-21 17:11:34
這是高度依賴於平臺,並沒有在標準中處理。 – 2013-02-21 17:12:06
沒有「標準」的方式來做到這一點。即使您描述的方法可能不會返回有效的結果。您必須使用特定於平臺的功能。 – 2013-02-21 17:12:38