繁体   English   中英

C++,如何使用 mmap() 确保对齐的内存?

[英]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 的乘法地址之间为此我需要两件事:

  1. 确保 size 是 8 的乘积(我已经通过四舍五入做了)

  2. 确保 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.

mmap 总是分配整个页面

如果 addr 为 NULL,则内核选择(页面对齐的)地址来创建映射 [...] 如果 addr 不为 NULL,则 [...] 在 Linux 上,内核将选择附近的页面边界

(在 Linux 以外的系统上,它仍然需要选择一个页面边界,但它可能不在附近)

在 x86 或 x86_64 上,页面是 4096 字节,所以你没问题。 很难想象一个页面小于 8 字节的 CPU。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM