c++ - Linux/GCC 中 mmap() 和 memalign() 的组合?

标签 c++ c gcc memory-management linux-kernel

我需要在我的 C++ 程序中分配一些内存块,有两个要求。首先,分配的地址需要与 block 大小对齐,其次需要分配低于 4GB 的虚拟地址空间。

memalign() 帮助我满足第一个要求,mmap() 帮助我满足第二个要求,因为我可以传递 MAP_32BIT 标志作为参数。但是否有可能以某种方式将它们结合在一个简单的解决方案中? (从技术上讲,我当然可以将 mmap() 与我想要的任何地址一起使用,但该解决方案可能不太便携)。

最佳答案

只需 mmap 一个大小为您需要的两倍(首先四舍五入到下一个幂)的 block ,然后 munmap 不需要的 block 。

关于c++ - Linux/GCC 中 mmap() 和 memalign() 的组合?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33871411/

相关文章:

python - 是否可以在python中定义c类型变量并将其地址传递给cython包装的函数

c++ - 为什么聚合推导中不支持大括号初始化列表但支持大括号省略?

c - 警告 : assignment makes integer from pointer without a cast

c - Emscripten:我怎样才能编译一个带有像 immintrin.h 这样的内部头文件的 c 文件?

c++ - 在使用包含冒号的类函数宏时,是什么导致编译器出现这种差异?

c++ - 就嵌入式系统的大小而言,我可以获得多小的完整编译器(如 clang 或 gcc)?

c - 告诉 gcc 在 C99 之前的模式下编译失败

c++ - 如何在 C++ 中获取二维动态数组的输入

c++ - 动态触发功能

C++我应该包含一个标题吗?