获取标准C++ 11中剩余的可用内存?

Vin*_*ent 6 c++ memory memory-management exception c++11

是否可以在标准 C++ 11中获得系统(x86,x64,PowerPC/Windows,Linux或MacOS)上的剩余可用内存而不会崩溃?

一种天真的方式是尝试从太大的大小开始分配非常大的数组,每次失败时捕获异常并减小大小直到没有抛出异常.但也许有一种更有效/更聪明的方法......

编辑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;
}
Run Code Online (Sandbox Code Playgroud)

Dav*_*eas 8

这高度依赖于OS /平台.你建议的方法甚至不需要在现实生活中工作.在某些平台上,操作系统会给你所有的内存请求,但在你使用它之前不会真正给你内存,此时你会得到一个SEGFAULT ......

该标准并没有有任何与此相关的.