我有一个类,它使用shm_open打开posix共享内存。 现在我必须多次创build这个类的对象(共有5-10个对象),这意味着相同的共享内存将被多次打开。
共享内存具有可变大小,可以从1k到500k。
有关这个问题是:
1.这是否会导致增加的内存使用量? (我没有看到这一切发生,所以我的猜测是没有)
2.访问共享内存时会导致性能不佳吗?
3.还有什么可以出错的吗?
答案是在你把shm_open链接到的页面上:
shm_open() 创建并打开一个新的 ,或打开一个现有的 POSIX共享内存对象。 一个POSIX共享内存对象实际上是一个句柄,可以被不相关的进程用来映射(2)共享内存的相同区域。
要访问一个共享内存对象,你需要一个句柄。 shm_open()可以用来打开(创建)新的,并重新打开现有的共享内存对象。 重新打开现有对象时,不会增加内存,也不会出现性能不佳的情况。
它不会增加内存使用量,但是每次打开共享内存时都会使用句柄,并且可能会用完。 (每个进程对打开的句柄数量都有限制。)
您需要使用同步对象(如信号量)来管理对共享内存的访问。
Mmap每次映射到一个不同的基地址,因此存储指向共享内存的指针是一个坏主意。