【发布时间】:2021-09-14 04:18:34
【问题描述】:
我目前正在使用 mmap 分配内存,如下所示:
void *void_new_block = mmap(nullptr, size, PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANONYMOUS, -1, 0);
现在我想提高 64 位 CPU 的性能,因此我需要我的块驻留在 8 的乘法地址之间为此我需要两件事:
-
为了确保大小是 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.
【问题讨论】:
-
过度分配,然后调整返回的指针以满足对齐需求。
-
@RichardCritten 但是我怎么知道从哪里做 munmap?
-
我更喜欢提供一些标志将解决 2 的解决方案,有一天我读到它是可能的,但再也找不到了
-
不要调整返回指针,复制后再对齐。
标签: c++ memory malloc cpu mmap