Mientras siga con Glibc u otros asignadores "normales" (jemalloc, tcmalloc, etc.), todas las bibliotecas compartirán el estado del montón y, por lo tanto, podrá liberar memoria asignada en algún lugar con malloc
donde quieras.
En teoría, puede ser posible eludir esto. Por ejemplo, alguna biblioteca puede estar vinculada con la implementación personalizada de malloc
/free
(a través del engaño de scripts de símbolos de -Bsymbolic
) que tiene su propio montón privado y, por lo tanto, no interactuará bien con otras partes de su programa. Pero nunca había visto algo así en la vida real.
Los contenedores STL se basan en malloc
/free
por lo que también es posible pasarlos/modificarlos a través de los límites de la biblioteca. Por supuesto, se pueden compilar diferentes bibliotecas con diferentes compiladores y diferentes versiones incompatibles de STL (por ejemplo, libstdc++, libcxx, etc.), pero sus tipos de contenedores C++ serían diferentes y el compilador simplemente no le permitiría pasarlos a través de módulos incompatibles.