Каков «правильный» способ примирить malloc и new в смешанной программе на C / C ++?

У меня есть смешанная программа C / C ++. Он содержит синтаксический анализатор flex / bison, который нацелен на C, а остаток - на C ++.

Будучи C, сгенерированный парсер и сканер управляют своей памятью,mallocrealloc а такжеfree, Они достаточно хороши, чтобы выставлять хуки, позволяющие мне представить мои собственные реализации этих функций. Как и следовало ожидать, остальная часть (C ++) программы "хочет» использовать ,newdelete, так далее.

Проведение небольшого исследования, кажется, показывает, что соответствующие стандарты не гарантируют, что такое смешивание должно работать. Особенно С "куча» не обязательно C ++свободная территория ", Кажется, две схемы могут попирать друг друга.

Кроме того, когда-нибудь (скоро) эта программа, вероятно, захочет интегрировать специализированную реализацию кучи, такую какtcmallocИспользуется как C, так и C ++.

Что "право" что тут делать?

Учитывая желание интегрировать tcmalloc (который объясняет, как связываться с программами на C), я 'Я испытываю искушение найти какую-то перекрестную, многопоточную, перекрестную перегрузку / перехват / что угодно в управлении памятью C ++. С этим я мог бы направить все вызовы выделения / выпуска C ++ обратно на их эквиваленты C (которые, в свою очередь, попадают в tcmalloc.)

Существует ли такой пангалактический глобальный хук C ++? Может быть, он уже делает то, что я хочу, как иios_base::sync_with_stdio тайно женится на iostream и stdio по умолчанию?

Меня не интересуют разговоры о stdio vs. iostreams, ни о переключении генераторов синтаксического анализатора, ни об использовании скелетов C ++ flex / bison (они создают независимые головные боли).

РЕДАКТИРОВАТЬПожалуйста, включите названия тех разделов стандарта C ++, которые поддерживают ваш ответ.

Ответы на вопрос(3)

Ваш ответ на вопрос