【发布时间】:2015-11-23 12:44:23
【问题描述】:
我需要在我的 C++ 程序中分配一些内存块,有两个要求。首先分配的地址需要在块大小上对齐,其次它需要分配在 4GB 以下的虚拟地址空间。
memalign() 帮助我解决第一个要求,mmap() 帮助我解决第二个要求,因为我可以将 MAP_32BIT 标志作为参数传递。但是有可能以某种方式将它们组合成一个简单的解决方案吗? (从技术上讲,我当然可以将mmap() 与我想要的任何地址一起使用,但该解决方案可能不太便携)。
【问题讨论】:
-
为什么设备驱动没有分配内存?
-
你为什么使用
mmap?malloc怎么样?你能告诉我原因吗? -
因为我不能告诉 malloc 分配低于 4GB,而且我的程序是用 64 位编译的。在 Visual Studio 中,我可以使用 /LARGEADDRESSAWARE:NO,但据我所知,GCC 中没有类似的东西。
-
@user1483597
mmap()始终通过构造为您提供页面对齐的内存。 -
@AndrewHenle 我需要将代码本身编译为 64 位,但特定的缓冲区地址为 32 位宽。听起来很奇怪,但这正是我所需要的。
标签: c++ c gcc memory-management linux-kernel