Maison > développement back-end > C++ > La norme C garantit-elle la même taille et la même disposition de la mémoire pour « std::array » que pour les tableaux intégrés ?

La norme C garantit-elle la même taille et la même disposition de la mémoire pour « std::array » que pour les tableaux intégrés ?

Linda Hamilton
Libérer: 2024-11-19 22:36:03
original
1092 Les gens l'ont consulté

Does the C   Standard Guarantee the Same Size and Memory Layout for `std::array` as for Built-in Arrays?

La norme C définit-elle la taille de std::array ?

En C 11, std::array offre un stockage contigu avec des performances comparables aux tableaux réguliers. Cependant, il n'est pas clair si la taille et la disposition de la mémoire de std::array reflètent celles des tableaux normaux.

Exigences standard

La norme C (§23.3.2.1/2) définit un tableau comme un agrégat initialisé via :

array<T, N> a = { initializer-list };
Copier après la connexion

En tant qu'agrégat, std::array ne peut pas utiliser de constructeurs pour convertir les données dans la liste d'initialisation. Cela implique qu'il stocke principalement les valeurs de données réelles.

Comportement spécifique à l'implémentation potentielle

Techniquement, il est possible qu'un std::array inclue des données auxiliaires ou non. -alignement standard, qui s'écarterait du comportement normal d'un tableau.

Par exemple, un compilateur pourrait ajouter une valeur sentinelle à la fin d'un std::array pour détecter les tentatives d'écriture hors limites. Alternativement, le super-alignement (par exemple, les instructions Intel SSE) pourrait être pris en charge par un std::array mais pas par un tableau intégré.

Comportement attendu

En général, vous pouvez vous attendre à ce que le code suivant se comporte comme prévu :

std::vector< std::array<int, N> > x(M);
typedef int (*ArrayPointer)[N];
ArrayPointer y = (ArrayPointer) &amp;x[0][0];
// Use y as a multidimensional array
Copier après la connexion

La plupart des compilateurs (par exemple, GNU et Intel) adhèrent à ce comportement. Cependant, il est important de noter que la norme ne garantit pas explicitement une disposition de mémoire identique pour std::array et les tableaux normaux.

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!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal