Каков «правильный» способ примирить malloc и new в смешанной программе на C / C ++?
У меня есть смешанная программа C / C ++. Он содержит синтаксический анализатор flex / bison, который нацелен на C, а остаток - на C ++.
Будучи C, сгенерированный парсер и сканер управляют своей памятью,malloc
realloc
а такжеfree
, Они достаточно хороши, чтобы выставлять хуки, позволяющие мне представить мои собственные реализации этих функций. Как и следовало ожидать, остальная часть (C ++) программы "хочет» использовать ,new
delete
, так далее.
Проведение небольшого исследования, кажется, показывает, что соответствующие стандарты не гарантируют, что такое смешивание должно работать. Особенно С "куча» не обязательно 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 ++, которые поддерживают ваш ответ.