Разве открытие общей памяти многократно плохо? - PullRequest
2 голосов
/ 30 мая 2011

У меня есть класс, который открывает общую память posix, используя shm_open . Теперь мне нужно создавать объекты этого класса несколько раз (всего 5-10 объектов), и это означает, что одна и та же общая память будет открываться столько раз.

Общая память имеет переменный размер и может быть от 1 до 500 КБ.

Вопросы, касающиеся этого:
1. Это приведет к увеличению использования памяти? (Я не вижу, что это происходит, поэтому я думаю, нет)
2. Не приведет ли это к ухудшению производительности при доступе к общей памяти?
3. Что-нибудь еще может пойти не так?

Ответы [ 2 ]

4 голосов
/ 30 мая 2011

Ответ находится на странице, с которой вы связали shm_open:

shm_open () создает и открывает новый или открывает существующий объект общей памяти POSIX. Объект разделяемой памяти POSIX фактически является дескриптором, который может использоваться несвязанными процессами для отображения (2) той же области разделяемой памяти.

Чтобы получить доступ к объекту общей памяти, вам понадобится дескриптор. shm_open () может использоваться как для открытия (создания) нового, так и для повторного открытия существующего объекта общей памяти. При повторном открытии существующего объекта не происходит увеличения памяти или плохой работы.

3 голосов
/ 30 мая 2011

Это не увеличит использование памяти, однако вы будете использовать маркеры каждый раз, когда открываете общую память, и у вас может закончиться память. (У каждого процесса есть ограничение на количество открытых дескрипторов.)

Вам необходимо управлять доступом к общей памяти, возможно, используя объекты синхронизации, такие как семафоры.

Mmap сопоставляется с другим базовым адресом каждый раз, поэтому хранить указатели, указывающие на общую память, - плохая идея.

...