簡體   English   中英

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

[英]How to know the available size of the shared memory that is used by `shm_open` in C++?

我正在使用 boost 庫為我的 C++ 程序處理 IPC,我發現如果我請求的內存大小大於其容量, boost::shared_memory_object不會拋出任何錯誤。 這個問題在堆棧溢出時至少被問過兩次:

為什么我可以使用 POSIX 創建比 /dev/shm 上安裝的大小更大的共享內存?

如何從 /dev/shm 獲取有關可用內存的信息

正如第一個問題的答案所說,沒有直接的方法可以確保您不會耗盡共享內存。 我唯一的選擇是在請求共享內存之前檢查可用內存大小。 然而,從問題

我如何更改 shm_open 路徑?

一個答案說共享內存的目錄可以是/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編譯)

然后你可以檢查那里的可用空間。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM