Maison >développement back-end >C++ >« std :: array » a-t-il la même taille et la même disposition de mémoire qu'un tableau intégré ?
La taille et la disposition de la mémoire de std::array sont-elles identiques à celles d'un tableau ?
Malgré la norme définissant std::array avec des éléments contigus stockage et performances comparables à une baie classique, il laisse place à une certaine ambiguïté quant à sa taille exacte et sa mémoire mise en page.
Exigences de la norme
La section 23.3.2.1/2 de la norme indique qu'un tableau est un agrégat initialisé avec une liste d'initialisation contenant jusqu'à N éléments convertibles en T. Cela suggère que std::array doit stocker les valeurs elles-mêmes, à l'exclusion de toute donnée auxiliaire.
Potentiel Variations
Cependant, la norme ne garantit pas explicitement que std::array aura la même taille et la même disposition de mémoire qu'un tableau intégré. Théoriquement, un compilateur pourrait stocker des données auxiliaires supplémentaires après les données spécifiées ou appliquer différentes règles de remplissage ou d'alignement.
Considérations sur le super-alignement
Les tableaux intégrés ne peuvent pas prendre en charge le super-alignement. -les exigences d'alignement, telles que les données pour les instructions SSE d'Intel. Bien que la spécification de std::array puisse permettre un super-alignement, il n'est pas explicitement garanti.
Implications spécifiques à la mise en œuvre
Conclusion : les exigences de la norme n'imposent pas définitivement ce std::array doit avoir la même taille et la même disposition de mémoire qu'un tableau intégré. Bien que la documentation suggère qu'elle devrait être tout aussi efficace en termes de mémoire, elle reste spécifique à l'implémentation. Par conséquent, on ne peut pas se fier à l’hypothèse d’une taille et d’une disposition de la mémoire identiques.
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!