Comptage de références non atomique de shared_ptr en C++ : une surprise en micro-benchmark

2025-08-31
Comptage de références non atomique de shared_ptr en C++ : une surprise en micro-benchmark

Un micro-benchmark comparant des structures de données Rust et C++ a révélé un comportement inattendu avec le `shared_ptr` de C++. Dans les environnements monothread, GNU libstdc++ optimise le comptage de références de `shared_ptr` pour qu’il ne soit pas atomique si `pthread_create` n’est pas importé. Cette optimisation de performance, bien que généralement sûre, peut entraîner des problèmes dans des scénarios inhabituels, par exemple lorsqu’une bibliothèque à liaison dynamique est chargée par un programme à liaison statique. L’auteur a étudié d’autres implémentations C++ (libcxx et Visual C++) et a finalement résolu la différence de performances en faisant référence à `pthread_create` dans son micro-benchmark. La découverte met en évidence la complexité des optimisations de bas niveau et leurs conséquences imprévues potentielles.

Développement