самая быстрая технология IN PROCESS для совместного использования памяти и IPC в win32 / C / C ++ - PullRequest
1 голос
/ 31 января 2012

Я пишу библиотеку в реальном времени, которая экспортирует стандартизированный интерфейс (VST) и размещается во внешних приложениях.

Библиотека должна публиковать таблицу, которая доступна для просмотра любому потоку в том же процессе (если она знает, где искать) - чтобы было ясно, эта таблица должна просматриваться ВСЕМИ библиотеками в пространстве процесса - если они знают, где смотреть.

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

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

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

Ответы [ 2 ]

4 голосов
/ 02 февраля 2012

Вы, кажется, смущены.Все потоки в одном и том же процессе совместно используют одно и то же адресное пространство, поэтому вам не нужна какая-либо форма IPC: если поток знает адрес таблицы, он может получить к нему доступ.

0 голосов
/ 02 февраля 2012

Используйте CreateFileMapping и передайте INVALID_FILE_HANDLE в качестве дескриптора файла. Это создаст именованные страницы общей памяти, которые будут доступны любому, кто знает имя.

Не пугайтесь того факта, что в документах MSDN говорится, что он поддерживается файлом подкачки - он попадет на диск только в том случае, если ваша физическая память исчерпана, как обычная системная память.

Во всех отношениях, поскольку он поддерживается аппаратным MMU - он идентичен обычной памяти.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...