Сериализация в C++ уже есть. Например в бусте имеется библиотека. А относительно хибернейта всего приложения, то это преодолимо.
Приложение как правило оперирует данными, которые определяют его состояние. Если изначально проектировать архитектуру классов так, что состояние приложения будет полностью описано определёнными классами, то останется только сделать их сериализуемыми и иметь некий реестр ссылок на объекты которые нужно включать в снапшоты.
Эта схема, разумеется, требует блокировки доступа на изменение объектов на время сохранения снапшота, но эта задача решается одним глобальным read-write locker'ом (таковой есть в pthread).
Не имеет смысла сохранять всю память приложения. Она всегда избыточна и содержит, как уже говорилось, много сущностей которые невозможно сохранить (сокеты, файловые дескрипторы и многое другое).
В любом случае нужно понимать, что полный хибернейт с возможностью отката до чекпоинтов нужен далеко не каждому приложению. В большинстве случаев игра просто не стоит свеч.