如何在Linux中限制C代码的堆大小
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了如何在Linux中限制C代码的堆大小,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1241字,纯文字阅读大概需要2分钟。
内容图文
![如何在Linux中限制C代码的堆大小](/upload/InfoBanner/zyjiaocheng/946/361e5f58fb4f4db1bf1008c845403633.jpg)
我想知道是否有可能限制在Linux机器上执行的C代码的分配堆大小.
有可能这样做吗?
这样做的目的是,除了其他全局变量和局部变量之外,我正在动态分配?70KBytes的内存和?20KBytes的堆栈内存.动态分配通过malloc()完成.
因此,为了确认问题不在于堆分配,我想限制将要运行的C代码的堆内存.
我在线阅读了几篇文章,发现如果我们使用malloc(),则内存可能被过度提交,但是如果我们使用calloc(),我们将仅获得可用内存,而没有过度承诺,??因为calloc()必须初始化内存块给出指针之前先设置为零.但是由于初始化开销,我不想使用calloc().
解决方法:
您可以在程序内部使用setrlimit(2),可能使用RLIMIT_AS(如Ouah’s answer所引用).
更好的是,让您的外壳做到这一点.使用bash是内置的ulimit.
确保您的程序确实在任何地方都正确且完整地处理了malloc失败(针对NULL指示失败,对malloc的每个返回进行测试).
如果您不测试malloc的结果,则在失败时,它会给出NULL,并且下一条指令很有可能会取消引用空指针(或非常接近它的某个地址),即undefined behavior,而在Linux上给出的是segmentation violation .
您可能应该在调试阶段考虑使用valgrind.
顺便说一句,今天只??有70KB的内存(至少在Linux笔记本电脑,台式机甚至平板电脑上).请注意,C standard library可能在幕后调用malloc(例如,fopen提供了一个FILE句柄,该句柄具有一些缓冲区,可以通过malloc在内部获取)
并且可以使用以下命令在Linux上禁用memory overcommit
echo 0 > /proc/sys/vm/overcommit_memory
以root身份运行.
内容总结
以上是互联网集市为您收集整理的如何在Linux中限制C代码的堆大小全部内容,希望文章能够帮你解决如何在Linux中限制C代码的堆大小所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。