gpt4 book ai didi

c - 为什么要使用 shm_open?

转载 作者:IT王子 更新时间:2023-10-29 00:22:01 27 4
gpt4 key购买 nike

这样做有什么好处:shm_open 跟在 mmap 之后?
为什么不创建一个常规文件,然后将 fd 传递给 mmap
我看不出 shm_open 的优势 - 这些只是引用,不是吗?

我看过全家的男人。在我看来,“ secret ”在于 mmaping 操作 - 文件“类型”似乎毫无意义。

任何指针都会很好,尤其是性能帐户。
我的上下文是一个(循环可写)缓冲区(比如 128MB),它将不断写入一个进程,并不断从另一个进程中转储。

举个例子:this 出了什么问题?打开/mmap 方法。

编辑
准确地说,是以下一项优于另一项:

fd = open("/dev/shm/myshm.file", O_CREAT|O_RDWR, S_IRUSR | S_IWUSR);
mem = mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_SHARED, fd, 0);

对比

fd = shm_open("/myshm.file", O_RDWR|O_CREATE, S_IRUSR | S_IWUSR);
mem = mmap(...same as before...);

当我在 /dev/shm fs 下用常规 open 创建一个文件,并向其中倾倒了 Gig 垃圾时,我的可用内存减少了 1G,我的可用磁盘空间保持不变。
这两种方法有什么区别?

最佳答案

如果您打开并 mmap() 一个常规文件,数据将在该文件中结束。

如果您只需要共享一个内存区域,而不需要持久化数据,这会产生额外的 I/O 开销,请使用 shm_open()。

这样的内存区域还允许您存储其他类型的对象,例如互斥锁或信号量,在大多数系统上您不能将其存储在 mmap() 的常规文件中。

关于c - 为什么要使用 shm_open?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24875257/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com