нужно написать распределитель разделяемой памяти для С++ std::vector

Помогите, пожалуйста, написать распределитель C++ для класса std::vector‹ nIcon*>.

Все примеры, которые я нахожу, показывают, какие методы мне нужно перезаписать, а не примеры кода.

Мне нужно реализовать распределитель с использованием общей памяти в окнах (используя CreateFileMapping и MapViewOfFile)


person Sergey    schedule 15.03.2011    source источник
comment
Извините, но Stackoverflow работает иначе. Опубликуйте, что вы уже сделали, и кто-нибудь поможет вам. Просить кого-то написать код для расплывчато описанной проблемы просто неправильно.   -  person dandan78    schedule 15.03.2011
comment
Я заметил, что ваш вектор содержит указатели на класс nicon. Вы уверены, что хотите, чтобы указатели были выделены из отображаемой памяти, или вы хотите, чтобы ваш значок был выделен из отображаемой памяти?   -  person Robᵩ    schedule 15.03.2011
comment
В любом случае размещение объектов стандартного класса в разделяемой памяти не сработает. Вы не можете всегда получать один и тот же адрес памяти в каждом процессе, а когда адреса разные, все указатели в объектах будут ломаться.   -  person Zan Lynx    schedule 15.03.2011
comment
Спасибо, да, nIcon - это класс, поскольку я могу прочитать руководство, я могу выделить память для определяемых пользователем классов, используя стандартный вектор в сочетании с управлением общей памятью (но без сложных примеров). Какие другие методы можно использовать здесь, чтобы разделить такой тип между несколькими процессами? В моем случае в динамически загружаемой dll мне нужно предоставить доступ для каждого подключения процесса dll.   -  person Sergey    schedule 15.03.2011


Ответы (2)


Могу я предложить вам взглянуть на межпроцессную библиотеку? Он позволяет создавать распределители с использованием разделяемой памяти.

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

person edA-qa mort-ora-y    schedule 15.03.2011
comment
Да, смотрел, но не могу скомпилировать под C++ Builder 2010. Вылетает с разными ошибками, т.к. стандартный пакет cbuilder не содержит межпроцессной библиотеки, поэтому скопировал из самой новой библиотеки. Даже замена всего boost в cbuilder не помогла, потому что RTL/VCL основан на более ранней версии boost. Сейчас я смотрю на библиотеку POCO, но у кого-нибудь есть успех с помощью c Builder? - person Sergey; 15.03.2011

Вы бы использовали:

std::vector< nicon *, MyAllocator >

Как бы вы написали MyAllocator

person CashCow    schedule 15.03.2011