在C ++中动态分配一些对象或变量时(我使用的是Windows 7)..有没有办法找出有多少内存(以字节为单位)可供我们免费使用,这样我们可以防止崩溃?另外我想知道它是特定于操作系统的吗?如果是,那么Windows与其他一些广泛使用的操作系统之间的区别是什么?
答案 0 :(得分:1)
它不取决于操作系统,而取决于处理器架构。进程可用的内存量取决于处理器中可用的地址引脚数。
如果您要分配一个连续的空间,比如数组,那可能会更困难,而且可用的单元数量也会非常少。
最好的方法是允许错误发生。malloc
在没有可用内存的情况下返回NULL
/ error.Check该情况采取必要的恢复操作。
答案 1 :(得分:1)
你不能轻易找出有多少可用内存。即使是可用内存的概念也不清楚,因为操作系统可能提供磁盘支持的虚拟内存。从本质上讲,在现代个人计算机上,主要问题不是内存不足,而是耗尽快速内存,进入一个页面文件活动很多的情况,事情真的变慢了。
如果动态内存分配在C ++中失败,则会出现std::bad_alloc
异常。
您可以安装所谓的 new-handler 来处理内存不足的情况。它可以记录某些东西并失败,或者可能从危机基金中释放一些记忆(可以这么说)。在某些情况下,这可能允许受控程序退出。
即使您确实发现在检查调用时可用的内存很多,但在您进行分配时,您的进程中的某些其他进程或线程可能已经耗尽了大部分内存,因此分配仍然失败。
因此,您需要为分配失败做好准备,或者设计合理的内存消耗,让您在忽略问题时感到安全。
因此,你问题的答案......
“有没有办法找出我们可以免费使用多少内存(以字节为单位),以便我们可以防止崩溃?”
是“否” - 事先检查可用内存无法阻止崩溃(可能是因为没有处理bad_alloc
异常)。