Самое простое решение: если вам требуется сложная индексация и другие подобные вещи, вам следует рассмотреть сервис-ориентированную архитектуру вместо общей памяти. Просто назначьте один процесс как ваш основной процесс кэширования, и пусть он принимает локальные соединения (через сокеты домена unix, или сокеты TCP, или что угодно) от других процессов, которым требуются данные. Это делает вещи намного, намного проще.
Если вы не выберете этот маршрут, имейте в виду, что общая память жесткая . То, что вы спрашиваете, определенно выполнимо в общей памяти - вы можете создать распределитель кучи в этом блоке shmem и т. Д. И т. Д. Распределители STL могут работать, но не ожидайте, что сторонние библиотеки будут довольны STL распределители с использованием пользовательских типов указателей. Вам понадобятся блокировки (если вы умны, вы можете избежать их в некоторых случаях, но не во всех, и в этом случае определенно попрощаетесь с STL), и вам придется восстанавливать все, что вы обычно принимают как должное.
Опять же, я настоятельно рекомендую вам начать с простого демона кэша. В большинстве случаев это прекрасно масштабируется, просто добавляет немного больше задержки.