Aza*_*Ali 5 c malloc memory-management dynamic-memory-allocation
我想确定我可以在计算机中分配的最大内存限制是多少.这是我为此任务编写的代码:
#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;
}
Run Code Online (Sandbox Code Playgroud)
如何在没有命中和试用的情况下确定可以分配多少内存?我在这个例子中分配了最大的int大小.但程序崩溃了.在这个例子中真正分配了多少内存?
malloc()允许失败,在这种情况下,它返回一个NULL指针而不分配任何内存.它总是一个全有或全无的分配.它要么成功并分配所请求大小的完整内存块,要么失败,返回NULL指针而不分配单个字节.
至于知道有多少内存可用 - 这实际上取决于环境:你在运行它的操作系统是16位,32位,64位内存架构?
例如,如果您在Windows 10上运行,则可以使用该GlobalMemoryStatusEx()工具(有关详细信息,请参阅MSDN:GlobalMemoryStatusEx()).
Linux,OTOH,提供了一种简单的sysconf()方法来检索类似的信息.有关更多详细信息,请参阅此页面.
即使您的操作系统是64位,也不一定意味着您的应用程序可以访问超过一定限制.例如,即使完整的虚拟内存空间为16TB,Windows 7 64位也只允许您在应用程序代码中寻址高达8GB的内存.
| 归档时间: |
|
| 查看次数: |
1929 次 |
| 最近记录: |