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

Allocate memory from a certain but big virtual address space (e.g. above 20GB)

本文关键字:例如 20GB 以上 内存 分配 地址空间 虚拟      更新时间:2023-10-16

我会在内存共享方面捣乱,上帝蛋糕希望我按照标题所说的去做,因为在20GB以上,我会为某些用户分配256MB的块(永远不会有其他大小),并与其他进程进行mmap(共享)。64位虚拟地址空间很大(16EB)。只是我需要将用户管理器的代码和数据与用户的内存分开。

完美的功能是这样的:

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

假设您所在的系统支持POSIX,您希望使用shmget创建或定位共享内存段,并使用shmat连接到该内存段。完成后,使用shmdt分离,并使用shmctl移除共享内存段。我让您阅读这些例程的文档。

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

相关文章: