首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >共享内存段与共享内存对象

共享内存段与共享内存对象
EN

Stack Overflow用户
提问于 2013-10-02 16:26:12
回答 2查看 1.9K关注 0票数 4

共享内存对象(使用shm_open创建)和共享内存段(Shmget)之间有什么区别?

它们是否有任何限制,不能像共享内存shmmax和shmall那样进行调优?

这两者之间是否有任何性能差异,在什么IPC场景中应该使用这些方案?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-10-03 08:41:12

"shmget“是一种在Linux内核中实现的特定于Linux的分配共享内存的方法。

"shm_open“是一个库函数,它通过使用mmap映射文件来模拟共享内存。因为文件是使用“共享”标志映射的,所以内存在进程之间共享。

在Linux1.x中,"/dev/shm“目录(包含文件)只是一个普通目录,因此使用"shm_open”的共享内存实际上是磁盘文件。在Linux3.x中,"/dev/shm“是一个特殊的目录,以避免将共享内存写入磁盘。

我认为这两种方法都可以用另一种方法代替。这仅仅是因为历史原因,为什么有两种不同的方法来创建共享内存。

票数 -2
EN

Stack Overflow用户

发布于 2014-09-30 21:20:37

我在测试中发现,通过shm_open访问的内存比通过shmget访问的内存要快。除此之外,它们在功能上非常相似。两者之间肯定有一些细微的缓存或TLB差异,但我不熟悉幕后的细节。

注意,我不得不使用shm_open的POPULATE选项来提高性能。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19141907

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档