如何从操作符new或mremap的malloc中获取页对齐内存
How to get page-aligned memory from operator new or malloc for mremap
是否有一种方法来分配内存块,使其起始地址与给定的页面大小对齐?注意,我不想在分配块之后计算对齐的地址。原因是在某些时候我必须在块上调用mremap(): mremap要求旧的地址参数与页面对齐。
mremap
只能安全地使用在由mmap
分配的内存区域上,这些区域本身就是对齐页面的。在其他任何地方使用它都是危险的(正式的,未定义的行为),并且可能看起来有效,但可能会以您无法立即看到的方式严重破坏事情。
您需要使用特定于系统的分配例程—这不是什么大问题,因为您还使用了依赖于系统的mremap函数。然而,你也需要小心你在内存中放置的东西(例如,使用放置new
将不能很好地工作),因为mremap可能会在你改变内存的大小时改变内存的地址。
由于您很可能为此使用Linux,您考虑过匿名mmap
区域吗?这将与malloc的行为相同,除了它会自动对齐页面。
一些malloc包提供此功能,但它不是标准化的。
posix版本相关文章:
- C++为构建时间获取QDateTime的可靠方法
- 如果没有malloc,链表实现将失败
- lambda参数转换为constexpr技巧,然后获取带链接的数组
- 如何使用 < 和 > 命令获取 c++ 中的输入和输出?
- 使用指针从C++中的数组中获取最大值
- 如何获取std::result_of函数的返回类型
- 如何在openssl-ecc中获取十六进制格式的私钥
- 使用Unreal C++获取VR耳机的世界位置/方向
- 获取日期异步信号安全吗?如果在信号处理程序中使用,它会导致死锁吗
- 从C字符串中获取奇怪的字符串长度
- 为什么我的for循环不能正确获取argv
- 从python中调用C++函数并获取返回值
- 如何获取一个数字的前3位
- 获取字符串的长度并将其分配给数组
- 无法获取菜单选择以运行函数.C++
- malloc() 可能出现内存泄漏
- 如何从 std::optional 中获取 QByteArray<QByteArray>,并在没有其他 malloc 的情况下保留 std::nullopt?
- 从 JNI 调用的 DLL 从哪里获取其内存以进行分配,例如 Malloc
- 使用 malloc 获取阵列空间
- 如何从操作符new或mremap的malloc中获取页对齐内存