-
Que fait malloc ?
Salut,
Oui, j'aimerais connaitre le niveau de complexité du malloc pour savoir si je devrais essayer d'en faire le moins souvent possible ou si c'est pas grave d'en faire beaucoup.
Par exemple, si le malloc est assez compliqué, ça me motiverait pour créer des TAD qui allouent pas mal d'un coup et qui prennent dans leur reserve par la suite, au lieu de refaire des malloc.
Mais, si le malloc fait deja un truc similaire (je prends un paquet de memoire vive la premiere fois, puis pour les malloc qui suivent, j'utilise un bout de ce que j'ai pris la premiere fois), peut être que ça vaut pas le coup.
Merci
-
J'oubliais : sur PC/Linux.
-
J'avais programmer un gestionnaire de mémoire en C (pour voir le nombre d'allocations, de free, ce qui n'a pas été désalloué, si l'utilisateur a écrit hors des bornes...). Pour stocker les entrées, j'avais initialement fait une liste chaînée simple.
Mais pour améliorer le code, j'ai ensuite utilisé une liste chaînée de tableau, et lorsque qu'un élément était désallouée, il allait dans un stock pour éviter une allocation future (je sais pas si on se comprend).
Si il y a bcp d'allocations séparées comme ça, il est souvent conseillé d'allouer par bloc (gain de mémoire (car le malloc met des drapeaux qui font perdre de la place) et gain de temps.
-
Cela depend du gestionnaire de memoire du systeme. malloc() et realloc() sont couteux, mais s'il n'y a que quelques allocations a faire, cela ne vaut pas le coup de se compliquer la vie. Si on mise sur la vitesse et que les allocations sont toutes d'une taille standard (ce qui arrive souvent dans les applications reseau, par exemple), il est alors preferable de creer un pool de zones memoires pre-allouees, et de travailler dessus.
Quant au niveau de complexite de l'implementation de malloc(), il varie pas mal selon les systemes. Dans les systemes modernes tournant sur workstations, un free() ne rend en general pas la memoire au systeme d'exploitation, mais le processus en garde la propriete pour accelerer les malloc() suivant. L'usage memoire augmente sans diminuer jusqu'a la fin du processus. Sur un super-calculateur, ce n'est pas vrai: la somme totale de la memoire utilisee reflete l'usage instantane, afin de maximiser l'utilisation des ressources.
-
Oué, c'est ce qu'il me semblait
thanks