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
1030 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!

source:php.cn
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