J'ai récemment remarqué que std::vector
efface sa mémoire avec des zéros après l'allocation.Pourquoi std :: vector zero initilize sa mémoire?
J'ai créé des conteneurs similaires avant (bien que non conforme à std
) et je n'ai jamais eu besoin de zéro explicitement la mémoire avant de créer de nouveaux éléments.
Je ne vois pas de raison de le faire et je me demandais pourquoi.
À titre d'illustration:
struct S {
int s[128];
};
bool vector_zeroed() {
std::vector<S> c;
while(c.size() < 1000) {
c.emplace_back();
}
bool zeroed = true;
for(const auto& s : c) {
for(int i : s.s) {
zeroed &= i == 0;
}
}
return zeroed;
}
bool array_zeroed() {
bool zeroed = true;
auto *s = new S[1000];
for(int k = 0; k != 1000; ++k) {
for(int i : s[k].s) {
zeroed &= i == 0;
}
}
delete[] s;
return zeroed;
}
vector_zeroed()
semble toujours revenir true
tout en array_zeroed()
retours false
.
Je suis évidemment manquer quelque chose ici mais je ne sais pas quoi.
Cela se produit en mode de sortie? – tkausl
Comment avez-vous créé le vecteur? si vous avez utilisé 'reserve', la mémoire ne devrait pas être remise à zéro. – NathanOliver
S'il vous plaît être plus explicite. Qu'est-ce * exactement * avez-vous remarqué? Quel code * exactement * vous a fait remarquer? Je peux créer des situations où 'std :: vector's n'a pas de mémoire nulle. Je peux créer des situations où un 'std :: vector's fait zéro mémoire. – Yakk