Vecteur vs tableaux : un dilemme de performances
En C, l'utilisation de tableaux a été découragée au profit des std::vectors. Cependant, l'ampleur des différences de performances a souvent été remise en question.
Évitement des tableaux C
Les directives actuelles suggèrent d'éviter les tableaux C nouvellement alloués, car ils nécessitent un suivi manuel et effacement. De plus, l'utilisation de tableaux sur la pile est déconseillée en raison du manque de vérification de plage et de la perte d'informations sur la taille lors de la conversion du pointeur. Dans de tels cas, std::array est recommandé, fournissant des fonctions de taille et des itérateurs.
std::Vector vs. Native Arrays
Les résultats empiriques révèlent que l'indexation de base, Les opérations de déréférencement et d'incrémentation sur les vecteurs fonctionnent de manière identique à leurs homologues de tableau/pointeur correspondants. L'analyse du code assembleur confirme cette équivalence (voir l'extrait de code ci-dessous).
int pointer_index(S &s) { return s.p[3]; } // Analogous to vector indexing int vector_index(S &s) { return s.v[3]; } // Same assembly code
int pointer_deref(S &s) { return *s.p; } // Analogous to iterator dereferencing int iterator_deref(S &s) { return *s.i; } // Identical assembly code
void pointer_increment(S &s) { ++s.p; } // Analogous to iterator increment void iterator_increment(S &s) { ++s.i; } // Same assembly code
Exception : avantage en termes de performances des tableaux nouvellement alloués
One L'exception à l'équivalence de performances concerne les tableaux nouvellement alloués contenant des objets non-classes ou des classes sans constructeurs définis par l'utilisateur. Dans ce cas, les tableaux nouvellement alloués peuvent offrir un avantage par rapport aux std :: vectors, car std :: vectors initialisent les éléments aux valeurs par défaut (par exemple, 0 pour int) lors de la construction.
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!