从某个但很大的虚拟地址空间(例如20GB以上)分配内存

时间:2012-08-26 10:58:41

标签: c++ c memory-management

我会搞乱记忆共享,神蛋要我做标题所说的,因为超过20GB我将为某些用户分配256MB块(没有其他尺寸)和mmap(共享)它们与其他进程。 64位虚拟地址空间为HUGE(16EB)。只是我需要将用户管理器的代码和数据保存在与用户内存分离的地方。

完美将是这样的功能:

void *malloc(size_t n, void *from, void *to);

1 个答案:

答案 0 :(得分:1)

假设您所在的系统支持POSIX,您希望使用shmget创建或查找共享内存段,并使用shmat附加到该内存段。完成后,使用shmdt分离并使用shmctl删除共享内存段。我留给你阅读这些例程的文档。

虽然shmat允许您请求映射共享内存的特定地址,但通常不需要这样做。您可以为地址参数传递零,shmat将选择一个地址。设置高地址不会将共享内存与其他内存分开,除非可能减少或更改因缓冲区溢出写入内存中非预期位置而导致的错误。