La question :
Selon la description de Bjarne Stroustrup du modèle de mémoire C, le matériel moderne ne peut pas effectuer d'opérations de chargement ou de stockage impliquant des données plus petites qu'un mot. Cependant, les tests de l'auteur avec les processeurs x86 démontrent qu'ils peuvent effectivement stocker des objets codés sur un seul octet.
La réponse :
Architectures de jeu d'instructions (ISA) modernes, y compris x86 , fournissez des instructions pour effectuer des magasins de taille en octets. Ces instructions sont atomiques et n'affectent pas les octets voisins.
En interne, certains processeurs non x86 peuvent implémenter des magasins d'octets à l'aide d'un cycle RMW, modifiant ainsi un mot entier dans la ligne de cache. Cependant, cela n'est pas exposé au programmeur et n'affecte pas l'exactitude des magasins externes.
La déclaration de Stroustrup selon laquelle le matériel moderne ne peut pas traiter des données plus petites qu'un mot est une généralisation inexacte. Les processeurs modernes peuvent en effet charger et stocker les octets de manière efficace.
Certains processeurs hautes performances peuvent utiliser un cycle RMW pour implémenter des magasins d'octets dans leurs caches. Il s’agit cependant d’un détail de mise en œuvre interne qui n’a pas d’impact sur le comportement visible des magasins de l’extérieur. Les magasins d'octets sont toujours atomiques et ne perturbent pas les octets voisins.
Le modèle de mémoire C garantit que les threads peuvent accéder et mettre à jour en toute sécurité des emplacements de mémoire séparés sans interférence. La mise en œuvre de cette garantie est laissée à la combinaison du compilateur et du matériel.
Les processeurs et contrôleurs de mémoire modernes disposent de mécanismes pour garantir que les magasins d'octets se comportent de manière atomique et correcte. Ils utilisent des techniques telles que des protocoles de cohérence de cache et des signaux de contrôleur de mémoire dédiés pour gérer les transferts de taille en octets.
Bien que les processeurs modernes puissent gérer efficacement les magasins d'octets, il est important de noter que certains des architectures ou des scénarios spécifiques peuvent entraîner des pénalités de performances. Par exemple, les magasins d'octets non alignés ou les écritures liées aux E/S peuvent entraîner une surcharge supplémentaire.
L'affirmation selon laquelle le matériel moderne ne peut pas effectuer de magasins de la taille d'un octet est inexacte. Les processeurs grand public et les ISA fournissent cette fonctionnalité depuis des décennies, garantissant que les opérations liées aux octets sont exécutées de manière efficace et sûre. Le modèle de mémoire C s'appuie sur ces capacités architecturales pour garantir l'exactitude et permettre des logiciels hautes performances.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!