J'ai une fonction qui développe un tableau lorsque j'essaie d'ajouter un élément s'il est plein. Lequel des blocs d'exécution est meilleur ou plus rapide?Redimensionnement des tableaux - Différence entre deux blocs d'exécution?
Je pense que mon deuxième bloc (commenté) peut être faux, car après avoir doublé mon tableau, je reviens vers l'original.
Lors de la création de tableaux, le compilateur recherche-t-il un bloc contigu en mémoire dans lequel il s'insère entièrement? (Sur la pile/tas, je ne comprends pas vraiment lequel, bien qu'il soit important pour moi d'apprendre qu'il est sans importance pour la question réelle.)
Si oui, cela signifie-t-il que l'utilisation du second bloc pourrait potentiellement écraser d'autres informations en écrasant la mémoire adjacente? (Puisque l'original utiliserait 20 blocs de mémoire adjacents, et le dernier 40.)
Ou est-ce que cela signifierait simplement que l'emplacement des éléments dans ma matrice serait divisé, causant de mauvaises performances?
void Grow()
{
length *= 2; // double the size of our stack
// create temp pointer to this double sized array
int* tempStack = new int[length];
// loop the same number of times as original size
for(int i = 0; i < (length/2); i++)
{
// copy the elements from the original array to the temp one
tempStack[i] = myStack[i];
}
delete[] myStack; //delete the original pointer and free the memory
myStack = tempStack; //make the original point to the new stack
//Could do the following - but may not get contiguous memory block, causing
// overwritten >data
#if 0
int* tempStack = myStack; //create temp pointer to our current stack
delete[] myStack; //delete the original pointer and free memory
myStack = new int[length *= 2]; //delete not required due to new?
myStack = tempStack;
#endif
}
Désolé, le commentaire multiligne n'a pas été accepté, il ne modifie pas correctement –
Utilisez un bloc de code. Commencez chaque ligne avec quatre espaces. – Guffa
J'ai utilisé un bloc de code - quand je reviens pour l'éditer, il disparaît alors j'essaye de tout remettre manuellement. Ne pas avoir d'aperçu non plus. Ah nvr m, je vois que tu l'as réparé pour moi, merci. –