Tant que vous vous en tenez à Glibc ou à d'autres allocateurs "normaux" (jemalloc, tcmalloc, etc.), l'état du tas sera partagé par toutes les bibliothèques et vous pourrez ainsi libérer de la mémoire allouée quelque part avec malloc
où vous voulez.
En théorie, il est possible de contourner cela. Par exemple, certaines bibliothèques peuvent être liées à une implémentation personnalisée de malloc
/free
(via la supercherie des scripts de symboles de -Bsymbolic
) qui a son propre tas privé et n'interagira donc pas bien avec les autres parties de votre programme. Mais je n'ai jamais rien vu de tel dans la vraie vie.
Les conteneurs STL sont basés sur malloc
/free
il est donc possible de les transmettre/modifier également au-delà des limites de la bibliothèque. Bien sûr, différentes bibliothèques peuvent être compilées avec différents compilateurs et différentes versions incompatibles de STL (par exemple libstdc++, libcxx, etc.) mais leurs types de conteneurs C++ seraient différents et le compilateur ne vous permettrait tout simplement pas de les transmettre à travers des modules incompatibles.