Передать выделенную память, используя карту памяти - PullRequest
0 голосов
/ 27 декабря 2011

Я пишу диспетчер памяти для Windows на C ++.Я создал класс, который выделяет память и передает ее клиенту как void *.Я переопределил новые и удалил операторы, чтобы использовать мой распределитель.

__forceinline void * operator new(size_t n)
{ 
    EnterCriticalSection(&CriticalSection);
    void *ret = Heap.Alloc(n); 
    LeaveCriticalSection(&CriticalSection);
    return ret;
}

Есть несколько потоков, которые обращаются к процессу распределителя, запрашивая некоторое количество памяти.Есть ли возможность передать эту выделенную память, используя карту памяти или что-то подобное, чтобы можно было передавать память между процессами?Есть ли способ просто передать void * другому процессу, чтобы использовать там выделенную память?

Ответы [ 2 ]

1 голос
/ 27 декабря 2011

Вы не можете просто передать void*, так как каждый процесс имеет свое собственное адресное пространство, а адрес в одном не имеет значения в другом. Посмотрите на этот вопрос , кажется, он удовлетворяет ваши потребности

1 голос
/ 27 декабря 2011

Использование карты памяти является правильным способом разделения блока памяти между процессами.Посмотрите на функции CreateFileMapping() и MapViewOfFile().Дайте вашей карте памяти уникальное имя, которое оба процесса указывают при вызове CreateFileMapping().

. Вы не можете передавать указатель void* между процессами.Указатель является локальным для адресного пространства вызывающего процесса.Различные процессы имеют свои индивидуальные адресные пространства.Однако, если void* поддерживается картой памяти, тогда оба процесса могут получить доступ к общей памяти, сопоставляя свои собственные локальные указатели void* с одноименной картой памяти.Затем вы можете передавать смещения в этой памяти назад и вперед между вашими процессами по мере необходимости, и они могут применять эти смещения к своим локальным указателям для доступа к тем же данным.

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