Mic*_*ine 5 c linux memory-management
我在linux上编写C程序,我想知道:
如何限制我的c程序消耗的总内存?
如果我为我的c程序设置了内存限制(例如32M),如果它需要的内存比32M多得多会发生什么?
您应该使用 setrlimit 系统调用,以及 RLIMIT_DATA 和 RLIMIT_STACK 资源来分别限制堆和堆栈的大小。使用 RLIMIT_AS 或 RLIMIT_RSS 很诱人,但您会发现它们在许多旧的 Linux 内核上不能可靠地工作,而且我在内核邮件列表上看不到这些问题已在最新内核中解决的迹象。一个问题涉及如何计算 mmap 的内存或不计入限制总数。由于 glibc malloc 使用 mmap 进行大分配,即使不直接调用 mmap 的程序也可能超出限制。
如果超过 RLIMIT_STACK 限制(调用堆栈太深,或在堆栈上分配太多变量),您的程序将收到一个 SIGSEGV。如果您尝试将数据段扩展到超过 RLIMIT_DATA 限制(brk、sbrk 或某些中介(如 malloc)),则尝试将失败。brk 或 sbrk 将返回 < 0 并且 malloc 将返回一个空指针。
归档时间: |
|
查看次数: |
4469 次 |
最近记录: |