Re: Question c

Top Page

Reply to this message
Author: Yves Martin
Date:  
To: Patrick Dupre
CC: Edgar Bonet, guilde
Subject: Re: Question c
On Sun, 2008-06-22 at 12:20 +0100, Patrick Dupre wrote:
> Bonjour,
> Hier j'ai eu recu un commentaire concernant le cout de la reallocation
> d'element un par un, desole je n'ai pas garde le mail et je n'ai pas
> immediatement reagit.
> Que l'allocation soit penalisante lors de l'allocation memoire je m'en
> fiche un peu. Mais lorsque j'accede aux elements de de variable,
> la je veux minimiser le cout CPU. Le veteur que j'ai cree semble se
> comporter comme un vecteur ordinaire, mais est-ce bien le cas ?


Ta question a du sens si tu travaillais avec un langage de script qui te
fournirait à tableau comme une implémentation de liste chaînée par
exemple.

Les fonctions alloc et realloc ne sont que des opérations de réservation
mémoire sur le tas "C" - créé et agrandi par l'appel système brk ou
sbrk, si mes souvenirs sont bons... avec Java, je n'ai plus ce genre de
soucis - j'en ai d'autres ;) !

Donc je pense qu'il te manque l'info suivante:
realloc ==
malloc (nouvelle taille)
+ copie du contenu du pointeur original
+ free (ancien pointeur)
En conséquence de quoi aucune différence de performance pour les accès
en lecture ou écriture sur ce type de bloc... même après de multiples
realloc.

Par contre, de nombreux realloc consomme du CPU pour la copie évidemment
et a l'inconvénient de fragmenter le tas C...
Si on a besoin provisoirement de grand volume mémoire, il faut utiliser
mmap "anonymous" pour éviter cette fragmentation qui peut s'avérer
problèmatique pour une processus dont la durée serait importante.

En espérant avoir dissipé tes craintes
Yves Martin