Finché rimani con Glibc o altri allocatori "normali" (jemalloc, tcmalloc, ecc.) lo stato dell'heap sarà condiviso da tutte le librerie e quindi sarai in grado di liberare memoria allocata da qualche parte con malloc
ovunque tu voglia.
In teoria potrebbe essere possibile aggirare questo problema. Ad esempio, alcune librerie possono essere collegate con l'implementazione personalizzata di malloc
/free
(tramite l'inganno degli script di simboli di -Bsymbolic
) che ha il proprio heap privato e quindi non interagirà bene con altre parti del tuo programma. Ma non ho mai visto nulla di simile nella vita reale.
I contenitori STL sono basati su malloc
/free
quindi è possibile passarli/modificarli anche oltre i confini della libreria. Ovviamente diverse librerie possono essere compilate con diversi compilatori e diverse versioni incompatibili di STL (ad es. libstdc++, libcxx, ecc.) ma i loro tipi di contenitori C++ sarebbero diversi e il compilatore semplicemente non ti permetterebbe di passarli attraverso moduli incompatibili.