#c #json #shared-memory
#c #json #разделяемая память
Вопрос:
Я пытаюсь разделить объект json между несколькими процессами. Код написан на C. В настоящее время я использую json-c, который работает довольно хорошо. Есть ли способ заставить библиотеку выделять в общую память? Если нет, то какая библиотека c позволит мне это сделать?
Спасибо
Комментарии:
1. считайте ваш json просто массивом байтов. совместное использование транка байтов в C похоже на поедание торта
Ответ №1:
Ваш вопрос зависит от конкретной ОС. Я предполагаю, что это на Linux.
Я не вижу простого способа (в частности, для изменяющегося JSON), поскольку общая память имеет некоторый фиксированный размер, см. shm_overview (7). Или, по крайней мере, создайте строку JSON, затем выделите для нее общую память (достаточно большого размера) и скопируйте строку JSON.
Рассматривали ли вы возможность использования файловой системы RAM, например, файловой системы tmpfs? Это должно быть быстро.
ПРИМЕЧАНИЕ
Настройки распределителя памяти библиотеки JSON (как это делает Янссон — исходный код находится на github) недостаточно, поскольку разные процессы обычно используют память по разным адресам.
Комментарии:
1. В основном все, что требуется, — это указать, как выделяется и освобождается память. Кто-нибудь знает библиотеку json, которая позволяет это.
2. @Mobius Это зависит. Сегменты общей памяти часто отображаются в разных местах в разных процессах. Это означает, что вы не можете хранить объекты, содержащие указатели, в сегменте общей памяти, поскольку эти указатели действительны только в процессе, который их создал.