【问题标题】:What is Linux/POSIX equivalent of VirtualAlloc with MEM_TOP_DOWN?带有 MEM_TOP_DOWN 的 VirtualAlloc 的 Linux/POSIX 等价物是什么?
【发布时间】:2016-06-25 10:13:24
【问题描述】:

什么是 Linux 或 POSIX 等效的 VirtualAlloc 和 MEM_TOP_DOWN,如果有的话?

【问题讨论】:

    标签: c linux posix virtualalloc


    【解决方案1】:

    对于mmap,POSIX 似乎没有任何东西。

    The GNU C Library version of mmap (BSD libc also has these flags) 通过MAP_FIXED(在特定地址分配)和MAP_GROWSDOWN(名称相似但MEM_TOP_DOWN实际上与此选项无关)扩展了它的功能。 GNU 和 BSD 的联机帮助页都不鼓励使用这些函数,因为可移植性问题(您被绑定到特定的 C 库,不再完全独立于操作系统)。

    您需要确定一种查找最高地址的方法。我建议尝试在顶部分配,并将传递的地址向下移动,直到它成功为止。步长和“搜索”算法将取决于您对精度和性能的需求。

    【讨论】:

    • @frp 为什么?功能在那里。你可以使用它。警告就是:一个警告,告诉你这个标志不是 POSIX。
    • 基本上是一样的,对吧。我的任务解决了。 “悲伤”是指以这种方式模拟 VirtualAlloc 会很慢。但是考虑到我的任务的具体细节,它可以很容易地优化很多,所以这没什么大不了的。
    • @frp 你衡量过你的“相当慢”的说法吗?看到这些东西中的大多数在非 Windows 上默认情况下如何变得更流畅,我不会感到惊讶的是 VirtualAlloc 一直都很慢。但这只是一种预感。
    • 并非如此。我会做一些基准测试。这个假设基于另一个假设,即 VirtualAlloc 以有效的方式实现:只有一个上下文切换,并使用进程内存布局的知识。由于没有可用的源代码,我不能说它是否是这样工作的。
    猜你喜欢
    • 1970-01-01
    • 2018-07-10
    • 2010-10-01
    • 2010-12-28
    • 1970-01-01
    • 1970-01-01
    • 2017-04-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多