gpt4 book ai didi

linux - 用 `sbrk` 替换 `mmap`

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:10:20 25 4
gpt4 key购买 nike

我读到过 sbrk 是一个已弃用的调用,应该更喜欢带有 MAP_ANONYMOUS 标志的 mmap。我需要一个可以增长的连续(逻辑)内存块。但是,mmap 将第一个参数视为提示,因此它可能会产生间隙,这在我的情况下是 Not Acceptable 。我尝试使用 MAP_FIXED 标志(如文档所述,不推荐使用)并且我可以获得连续内存,但是在映射多个页面之后我的程序出现了奇怪的行为:系统函数如 printfclock_gettime 开始失败。我猜想我在没有 MAP_FIXED 的情况下调用的第一个 mmap 返回的页面后面有一些映射页面,其中包含系统数据。那么使用 mmap 而不是 sbrk 的正确方法是什么?

最佳答案

在 Linux 中,您可以使用 mmapMAP_NORESERVE(也可能是 PROT_NONE)来声明大块地址空间,而无需实际分配任何内存.您映射您可能想要(并且可以获得)的最大区域,然后使用 MAP_FIXED 重新映射它的位以根据需要实际分配内存。

关于linux - 用 `sbrk` 替换 `mmap`,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38071916/

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