簡體   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