[英]C++, How to Ensure Aligned Memory Using mmap()?
我目前正在使用 mmap 分配内存,如下所示:
void *void_new_block = mmap(nullptr, size, PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANONYMOUS, -1, 0);
现在我想提高 64 位 CPU 的性能,因此我需要我的块驻留在 8 的乘法地址之间为此我需要两件事:
确保 size 是 8 的乘积(我已经通过四舍五入做了)
确保 mmap 将在 8 的乘法地址处开始分配。
我该如何解决2? 我听说一些特殊的标志可能会有所帮助?
一些注意事项,我的操作系统:
Distributor ID: Ubuntu
Description: Ubuntu 18.04.3 LTS
Release: 18.04
Codename: bionic
g++ 版本:
g++ (Ubuntu 7.5.0-3ubuntu1~18.04) 7.5.0
Copyright (C) 2017 Free Software Foundation, Inc.
如果 addr 为 NULL,则内核选择(页面对齐的)地址来创建映射 [...] 如果 addr 不为 NULL,则 [...] 在 Linux 上,内核将选择附近的页面边界
(在 Linux 以外的系统上,它仍然需要选择一个页面边界,但它可能不在附近)
在 x86 或 x86_64 上,页面是 4096 字节,所以你没问题。 很难想象一个页面小于 8 字节的 CPU。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.