Loading lang_cpp_02_sharing...

enib_small.png LANG-CPP 02_Sharing — Accès partagé aux données

Il a été vu, au chapitre précédent, que les types élaborés de C++ offrent l'avantage d'assurer un comportement cohérent vis-à-vis de la recopie.
Par exemple, une donnée de type std::string, std::array<T, N> ou std::vector<T> peut être transmise en paramètre ou en retour d'une fonction aussi simplement qu'on le ferait avec un entier ou un réel.
Il s'agit, certes, d'un confort appréciable mais n'oublions pas que le choix d'utiliser C++ (ou C) est très généralement motivé par le soucis d'économiser les ressources (temps de calcul, énergie...).

Lors de sa présentation “Efficiency with Algorithms, Performance with Data Structures” à la conférence CppCon 2014, Chandler Carruth explique qu'une accumulation de maladresses, qui prises isolément semblent négligeables, réduit considérablement les performances globales d'un programme et sont malheureusement indécelables avec les outils d'analyse de performances.
Il ne s'agit, en effet, pas d'une portion d'algorithme particulièrement lente vis-à-vis du reste du programme (qui pourrait alors être repérée et remaniée en conséquence) mais d'une multitude de pénalités éparses qui ne sont pas mesurables individuellement et dont les effets s'accumulent de manière néfaste.
Le propos de ce chapitre est donc de prendre conscience de l'éventuel surcoût à l'exécution qu'un partage de données mal maîtrisé peut impliquer, et de découvrir les moyens de contrôle très fins que C++ nous offre à cet effet.
{1 #copy_move } Recopie et déplacement
{2 #heavy } Partage de données volumineuses

À travers ces quelques expérimentations, nous avons constaté que le partage de données au sein d'un programme était motivé par différents besoins, ce qui donne lieu à une variété de comportements :

Ces recommandations peuvent être reformulées selon les consignes suivantes pour tendre à en systématiser l'usage :
Puisque nous justifiions le choix d'utiliser C++ par le soucis d'économiser les ressources tout en garantissant une bonne robustesse des réalisations, il faudra dorénavant s'efforcer d'utiliser ces règles de manière systématique dans les futures expérimentations et réalisations.