【发布时间】:2017-07-03 21:16:20
【问题描述】:
我想确定我可以在我的计算机中分配的最大内存限制是多少。这是我为此任务编写的代码:
#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()是否成功,因此您没有实现您想要的。 “在这个例子中实际分配了多少内存?” --> 可能没有。 -
@MichaelWalz 是的,但这涉及“打击和审判”,不是吗?
-
另外,您需要注意一些现代操作系统 overcommit,也就是说,它们(似乎)分配了比可用内存更多的内存,作为物理内存和交换空间.例如,我的 Ubuntu 系统有 32 GB 物理内存和只有 4 GB 交换空间,因此它不可能有超过 36 GB 的“实际虚拟”内存,但 malloc 愉快地分配了 131071 GB(是的,131 千 gigabytes),然后程序在填满 10 GB 时被系统杀死。
-
XY 问题。你为什么想知道?即使有一个函数可以获取当前可用内存(物理的?虚拟的?),在该函数返回到多处理系统上的代码之前,它可能已经出错了。
-
旁注:
1不是质数。
标签: c memory-management malloc dynamic-memory-allocation