我想确定我可以在计算机中分配的最大内存限制是多少。这是我为此任务编写的代码:
#include <stdio.h>
#include <stdlib.h>
int main() {
int j;
int *primes;
int i ;
int limit = 2147483647;
primes = malloc(sizeof(int) * limit);
for (i = 0; i < limit; i++)
{
primes[i] = 1;
}
return 0;
}
如何确定在没有命中和尝试的情况下可以分配多少内存?我在这个例子中分配了最大 int 大小。但程序崩溃了。
本例中实际分配了多少内存?
malloc()
允许失败,在这种情况下它返回一个 NULL 指针不分配任何内存。它始终是一个全有或全无分配。它要么成功并分配所请求大小的完整内存块,要么失败,返回 NULL 指针而不分配单个字节。
至于知道有多少内存可用 - 这实际上取决于环境:您在什么操作系统中运行它,是 16 位、32 位、64 位内存架构吗?
例如,如果您在 Windows 10 上运行,则可以使用GlobalMemoryStatusEx()
设施(请参阅MSDN:GlobalMemoryStatusEx() https://msdn.microsoft.com/en-us/library/windows/desktop/aa366589(v=vs.85).aspx了解详情)。
Linux,OTOH,提供了一个简洁的sysconf()
检索相似信息的方法。参考这一页 http://pubs.opengroup.org/onlinepubs/009695399/functions/sysconf.html更多细节。
即使您的操作系统是 64 位,也并不一定意味着您的操作系统应用可以访问超过一定限制的内容。例如,Windows 7 64 位仅允许您在应用程序代码中寻址最多 8GB 的内存,即使完整的虚拟内存空间为 16TB。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)