malloc() 分配的缓冲区是否可能与使用 mmap() 分配的另一个缓冲区重叠?

发布于 2025-01-06 10:47:18 字数 107 浏览 2 评论 0原文

我计划使用 mmap() 来分配靠近特定地址的缓冲区。

我担心的是,使用 mmap() 分配的缓冲区将与 malloc() 或 new 运算符(C++)分配的其他缓冲区重叠。是否可以?

I plan to use mmap() to allocate a buffer close to a specific address.

What I'm worried about is, the buffer allocated using mmap() will overlap other buffers allocated by malloc() or new operator (C++). Is it possible?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

不忘初心 2025-01-13 10:47:18

如果您使用MAP_FIXED要求mmap在特定地址创建映射,那么是的您可能会覆盖现有映射,例如空间由malloc分配,共享库代码或数据部分等的一部分。基本上,使用MAP_FIXED总是错误的,除非您已经通过调用获得了地址范围到mmap 而不指定 MAP_FIXED (这样你就知道它属于你);在这种情况下,您可以使用 MAP_FIXED 有意覆盖部分映射)。

其他答案似乎都忽略了您所说的“靠近特定地址”这一事实,这对我来说意味着MAP_FIXED。如果您不使用 MAP_FIXED,请详细说明如何获取“靠近特定地址”的映射。

If you use MAP_FIXED to demand mmap create the mapping at a particular address, then yes it is possible that you overwrite an existing mapping such as space allocated by malloc, part of a shared library's code or data section, etc. Basically it's always an error to use MAP_FIXED unless you've already obtained the address range via a call to mmap without specifying MAP_FIXED (so you know it belongs to you); in this case you can intentionally overwrite parts of the mapping using MAP_FIXED).

The other answers all seemed to miss the fact that you said "close to a specific address", which to me implies MAP_FIXED. If you're not using MAP_FIXED, please elaborate on how you're obtaining a mapping "close to a specific address".

你在我安 2025-01-13 10:47:18

不,那不会发生。

malloc 函数维护的堆位于通过 brkmmap 建立的虚拟映射中,因此只有在以下情况下才能重用内存区域:内核通过 mmap 两次给出相同的块。

No, that does not happen.

The heap maintained by the malloc function lives in virtual mappings that have been established via brk or mmap, so memory areas could only be reused if the kernel gave out the same block via mmap twice.

森林很绿却致人迷途 2025-01-13 10:47:18

您必须使用 malloc 分配映射的内存。分配的内存不会重叠。所以不,你会没事的。

You must allocate the memory that is mapped, with malloc. malloced memory won't overlap. So no, you'll be fine.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文