ICode9

精准搜索请尝试: 精确搜索
首页 > 系统相关> 文章详细

如何在Linux中限制C代码的堆大小

2019-11-20 14:00:57  阅读:363  来源: 互联网

标签:memory heap-memory c-3 memory-management linux


我想知道是否有可能限制在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身份运行.

标签:memory,heap-memory,c-3,memory-management,linux
来源: https://codeday.me/bug/20191120/2044533.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有