【发布时间】:2012-10-31 15:05:04
【问题描述】:
我的操作系统是 arch linux 64 位。
free -m 结果如下
缓存的已用空闲共享缓冲区总数 电话:32172 31909 262 0 119 13054 -/+ 缓冲区/缓存:18735 13436 交换:258 258 0 ulimit -a 核心文件大小(块,-c)无限制 数据段大小 (kbytes, -d) 无限制 调度优先级 (-e) 20 文件大小(块,-f)无限制 待处理信号 (-i) 257329 最大锁定内存 (kbytes, -l) 64 最大内存大小 (kbytes, -m) 无限制 打开文件 (-n) 1024 管道大小(512 字节,-p)8 POSIX 消息队列(字节,-q)819200 实时优先级 (-r) 0 堆栈大小(千字节,-s)8192 cpu时间(秒,-t)无限制 最大用户进程 (-u) 257329 虚拟内存 (kbytes, -v) 无限制 文件锁 (-x) 无限制kenerl 选项 overcommit_memroy 为 0
但是当我尝试使用 malloc 分配 2G 字节时,我失败了,原因是:无法分配内存?
【问题讨论】:
-
malloc() 参数是一个 SIZE_T,其范围是 [O,SIZE_MAX]。 SIZE_MAX 的值取决于实现,但您可能需要查看
以查看适合您的配置的限制。 -
物理内存的总大小是32GB,我之前已经分配成功了4GB。所以我认为2GB并没有超出size_t的限制。
-
什么是“之前”?您是否更改了任何可以解释为什么您无法重做此操作的内容?
-
除了内核限制(您已经做过)之外,还有一件事要检查:寻找 apparmor 和 SELinux 之类的东西,我认为他们可以在这些东西中强制执行配额。还要在linux中寻找一般的配额,你可能有某种执行器正在运行。最后尝试看看如果你刷新缓存的内存会发生什么。
-
我已经检查了我的操作系统、应用程序装甲和 Selinux 已禁用
标签: c linux-kernel