OVH Cloud OVH Cloud

Pourquoi vector fait-il appel au constructeur de copie lors d'un 'realloc' ?

11 réponses
Avatar
Marc Boyer
Bonjour,

suite au post de JM, je voulais savoir si vector *doit* faire
le cycle copie/destruction en cas de déplacement de la zone
mémoire suite à un agrandissement.

D'après le code expérimenté par JM, c'est le cas. Mais je
voudrais savoir si (et pourquoi) le vector ne peut pas
simplement faire un (pseudo) realloc, ie demander
de la mémoire brute, plus grande, et faire une copie
bit à bit des objets dejà stockés ?

Marc Boyer
--
Si tu peux supporter d'entendre tes paroles
Travesties par des gueux pour exciter des sots
IF -- Rudyard Kipling (Trad. Paul Éluard)

1 réponse

1 2
Avatar
Franck Branjonneau
Jean-Marc Bourguet écrivait:

Marc Boyer writes:

Tu as une ref sous la main pour le coup du coef supérieur
à sqrt(2) ? (sinon, je vais chercher tout seul).


J'avais en mémoire le nombre d'or.


Oui. La référence est dans un GotW, chercher Koenig growth factor.

Il faut que ce qui a été libéré est supérieur en taille à ce qu'il
faut allouer. Donc

sum_{i=0}^{N} x^i > x^{N+2}
over{x^{N+1}-1}{x-1} > x^{N+2}
x^{N+1}-1 > x^{N+3} - x^{N+2}
x^{N+2}+x^{N+1} > x^{N+3}-1

Vu la forme (ça fait penser à la suite de Fibonacci et la limite de 2
termes successifs de cette suite, c'est le nombre d'or), le nombre d'or me
semble un meilleur candidat que racine de 2, mais je ne vois plus comment
conclure formellement.


Tu écris ta dernière égalité sous la forme :

1/x^{N+1} > x^{2}-x^{1}-1

et tu passes à la limite quand N tend vers l'infini.

--
Franck Branjonneau


1 2