Как выровнять память по строке кэша с помощью Boost Interprocess Shared MemoryC++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Как выровнять память по строке кэша с помощью Boost Interprocess Shared Memory

Сообщение Anonymous »

Я пишу код Boost.Interprocess для общей памяти между двумя процессами. Я использую Managed_shared_memory. Я инициализирую память с помощью boost::interprocess::open_or_create и выделяю в ней память с помощью find_or_construct, вот так:

Код: Выделить всё

auto data_ptr = segment.find_or_construct("data")[max_elements]();
Я использую find_or_construct, чтобы один процесс инициализировал память, а другой процесс получал структуру данных. Все это атомарно.
Я хочу убедиться, что data_ptr выровнен по строке кэша, то есть он должен начинаться с адреса, кратного 64 байтам (в моей системе). Как мне добиться такого выравнивания?
Дополнительная информация:
Размер строки системного кэша составляет 64 байта.
Я использую Boost.Interprocess для управления общей памятью.
Я просмотрел документацию Boost.Interprocess, но не смог найти прямого способа указать выравнивание памяти для find_or_construct. Будет очень полезно, если я смогу найти другой способ выравнивания памяти с помощью Boost и гарантировать, что один процесс инициализирует память, в то время как другой процесс получает структуру данных, без каких-либо проблем с синхронизацией.

Подробнее здесь: https://stackoverflow.com/questions/787 ... red-memory
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»