Я ищу окончательный ответ (если он действительно существует) о том, сколько памяти должно быть выделено при создании статических кусков общей памяти через boost::interprocess
's managed_shared_memory
. Даже official examples, кажется, выделяют arbitrarily large куски памяти.Сколько памяти следует использовать «managed_shared_memory»? (boost)
Рассмотрим следующую структуру:
// Example: simple struct with two 4-byte fields
struct Point2D {
int x, y;
};
Моя первая реакция является то, что необходимый размер будет 8 байт, или sizeof(Point2D)
. Это терпит неудачу, когда я пытаюсь построить объект, давая мне seg-faults во время выполнения.
// BAD: 8 bytes is nowhere near enough memory allocated.
managed_shared_memory segment(create_only, "My shared memory", sizeof(Point2D));
Какая операция чтения/записи вызывает seg-faults? Операции стека? Временно распределяется в пределах segment.construct()
? Сколько накладных расходов необходимо при распределении разделяемой памяти?
Путем проб и ошибок я обнаружил, что умножение размера на 4 может работать для вышеуказанной структуры, но разваливается, когда я начинаю добавлять дополнительные поля к моему struct
. Итак, это пахнет плохим взломом.
Некоторые могут утверждать, что «память дешевая» на современном ПК, но я не согласен с этой философией и не люблю выделять больше, чем мне нужно, если я могу ее избежать. Вчера я выкопал документы Boost и не нашел никаких рекомендаций. Вот, чтобы узнать что-то новое сегодня!
Люди могут не согласиться со мной здесь, но я никогда в жизни не кодировал по строкам «память дешевая». Покупка памяти не обязательно стоит дорого по сравнению с тем, как она была раньше, но она очень похожа на деньги. Чем больше у вас есть, тем больше вы тратите. Каждое обновление памяти, которое я купил для своего компьютера, я быстро освоил, что могу «запустить больше вещей». Я всегда старался кодировать консервативно в этом отношении, потому что это не обязательно дешево * для моего приложения *. Во всяком случае, только мой 2c на этом :) –
Я согласен на 100%! И это все ** причина, по которой я задаю этот вопрос. Я только бросил этот комментарий там, чтобы отговорить любого, кто сказал: «Кто заботится, просто выделите 1k и сделайте с ним». Я постараюсь сделать это более ясным в этом посте. –
Ah ok :) «Некоторые могут спорить» намного лучше! –