我正在寻找有关在 Windows 上的共享内存段中存储少量数据(只有几个字节)的建议和建议。
现在,每当我们映射共享内存时,我们都会将映射大小四舍五入到最接近的 4KB,这样我们就会得到多个映射的页面。
mem_size = ((mem_size + 4095) / 4096) * 4096;
但是,我想映射足够的内存以在进程之间共享一个命名整数。或者更具体地说,进程之间有许多不同名称的整数。我正在查看大约一千个整数,它们都有不同的名称,每个都由一个或多个进程映射。
我不想将 4 个字节四舍五入到 4KB,因为这将是一个巨大的浪费。在创建了大约一千页之后,当我只需要一个时,我会使用大约一千页。
但我担心仅为 4 个字节创建命名内存段的开销。操作系统是否足够“合理”以尝试在可能的情况下将不同的映射安装到同一页面上?(我知道,没有保证)。或者这会很快爆发吗?
我曾考虑映射一大块内存,但仍然需要按名称引用各个整数。在共享内存中维护哈希表似乎只是在复制操作系统的工作。
是否有一种替代CreateFileMapping/OpenFileMapping
技术MapViewOfFile
更适合在进程之间共享非常少量的数据?还是我什么都不担心?