Совместное использование памяти GlobalAlloc () из DLL нескольким приложениям Win32 - PullRequest
1 голос
/ 25 января 2012

Я хочу переместить мою библиотеку кэширования в DLL и позволить нескольким приложениям совместно использовать один указатель, выделенный в DLL, с помощью GlobalAlloc ().Как я могу это сделать, и это приведет к значительному снижению производительности?

1 Ответ

2 голосов
/ 25 января 2012

Конечно, вы могли бы сделать это, и не будет никакого влияния на производительность для одного указателя.

Вместо использования GlobalAlloc, устаревшего API, вы должны выбратьдругая общая куча.Например, самым простым в использовании является распределитель COM, CoTaskMemAlloc.Или вы можете использовать HeapAlloc, передавая кучу процесса, полученную с помощью GetProcessHeap.

Например, и пренебрегая показом проверки ошибок:

void *mem = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, size);

Обратите внимание, что вам нужно беспокоиться о совместном использовании кучи, только если вы ожидаете, что память будет освобождена в другом модуле, из которого она была создана.Если ваша DLL создает и разрушает память, вы можете использовать старый malloc.Поскольку все модули находятся в одном и том же адресном пространстве процесса, память, выделенная любым модулем в этом процессе, может использоваться любым другим модулем.

Обновление

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

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