【发布时间】:2018-01-24 20:03:36
【问题描述】:
我想在 C 堆上分配特定大小的内存。作为测试,我使用了以下代码(检查最大允许值):
int main(void) {
int *val;
val=(int*)malloc(4096);
if(!val)
break;
return 0;
}
问题是,当使用malloc() 尝试一系列值时,大小约为 1900MB,它会失败。然而,我安装了 16 GB 的 RAM,其中大约 12 GB 可用。
所以我什至无法考虑分配更高价值的内存。
我做错了什么吗?
关于malloc(),有什么我应该知道的吗?
我看到许多程序(如虚拟机)使用大量内存,所以我已经排除了操作系统的安全功能的想法。
【问题讨论】:
-
为什么要分配这么多内存呢?另外您使用的是 64 位编译器还是 32 位编译器?
-
if(!val) break;谁教你的??你甚至没有循环! -
好吧 malloc() 会给你你要求的内存量(直到你得到内核恐慌或操作系统拒绝你的请求)。你的问题没有多大意义。
-
你能显示实际失败的代码吗?
-
@Adosi 我试过 32-但是一个,顺便说一句只是一个测试......
标签: c memory memory-management malloc