gpt4 book ai didi

linux - mmap 区域从保留的堆栈空间分配?

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:41:03 26 4
gpt4 key购买 nike

在我们的产品中,我们使用完全依赖 mmap 进行内存分配的 malloc 实现。我们还合理使用了allocaing。我们刚刚遇到了一个问题,mmap 将分配应该保留到堆栈空间的区域(因此当我们的一个较大的 alloca 溢出到 malloc 区域时会导致非常糟糕的事情发生)。

我们进程分配的限制是我们的 VM 地址空间,而不是物理内存。我们观察了进程运行时的/proc/*/maps 文件,观察到 malloc 耗尽了所有可用的地址空间。它最终求助于在堆栈 rlimit-set 范围内分配地址,最终一个大的 alloca 延伸到它里面。

我们试图通过在启动时alloca我们的整个堆栈限制来解决这个问题,但是这并没有证明跨平台稳定(它试图访问alloca code>d 内存在我的 2.4 开发箱上,而它在 2.6 生产机器上工作。

有什么方法可以实际保留地址空间吗?还能做什么?

最佳答案

旧版本的 heartbeat 确保堆栈空间是通过调用递归函数来提交的,memset() 一次将 1Kb 设置为 0xff。 Heartbeat 这样做是为了能够 mlock() 它可能需要的所有内存。

关于linux - mmap 区域从保留的堆栈空间分配?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3351384/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com