gpt4 book ai didi

c++ - 如何知道C++中 `shm_open`使用的共享内存的可用大小?

转载 作者:行者123 更新时间:2023-12-03 07:23:06 25 4
gpt4 key购买 nike

我正在使用boost库在C++程序的IPC上工作,并且发现如果我请求的内存大小大于其容量,boost::shared_memory_object不会抛出任何错误。在堆栈溢出中至少已两次询问此问题:
Why I can create a shared memory bigger than the size mounted on /dev/shm using POSIX?

How to get information about free memory from /dev/shm
正如第一个问题的答案所述,没有直接的方法来确保您不会耗尽共享内存。我唯一的选择是在请求共享内存之前检查可用内存大小。但是,从问题
how do i change the shm_open path?
一个答案说共享内存的目录可以是/dev/shm/var/run/shm(或我猜的其他任何东西)。通过查看shm_overview,我们还可以确认/dev/shm不是唯一的路径,它只是常规路径。所以我的问题是:如果不确定shm_open使用的共享内存目录,我们如何知道Linux上共享内存的可用大小?
任何建议将不胜感激。

最佳答案

如果您希望使用仅限于glibc的非便携式解决方案,则可以作弊并查看glibc的来源。
shm_open:
https://code.woboq.org/userspace/glibc/sysdeps/posix/shm_open.c.html#shm_open
调用此函数以获取基本路径:
https://code.woboq.org/userspace/glibc/sysdeps/posix/shm-directory.c.html
它是一种硬编码,似乎不是可配置的。
但是至少您可以自己称呼它:

#include <stdio.h>
extern "C" const char *__shm_directory (size_t *len);
int main() {
size_t idontcare;
puts(__shm_directory(&idontcare));
}
(用 -lpthread编译)
然后,您可以检查那里的可用空间。

关于c++ - 如何知道C++中 `shm_open`使用的共享内存的可用大小?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64495469/

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