Malloc et la fragmentation mémoire.

La question :

Bonjour.

Je voudrais juste être bien sûr !!!
lorsqu'on utilise des malloc et des free en C, il n'y a uncun mécanisme
possible de compactage de la mémoire.

Sans quoi je suppose que les adresses retournées par malloc ne seraient
plus valides !

Si par hasard j'étais dans l'erreur, comment pourrai fonctionner de tels
gestionnaire de mémoire ?

Merci
Etienne

Poser votre question sur le forum Programmation

Les 8 réponses :

Le Mon, 02 May 2011 09:29:23 +0200,
Etienne écrivait :


Bonjour.


Bonjour,


Je voudrais juste être bien sûr !!!
lorsqu'on utilise des malloc et des free en C, il n'y a uncun mécanisme
possible de compactage de la mémoire.

Sans quoi je suppose que les adresses retournées par malloc ne seraient
plus valides !

Si par hasard j'étais dans l'erreur, comment pourrai fonctionner de tels
gestionnaire de mémoire ?


À ma connaissance, ça n'existe pas. Un tel outil ne pourrait pas
simplement aller modifier tous les pointeurs valides sauf à
introduire des algorithmes complexes (et encore...). C'est pour cela
qu'il existe des algorithmes best fit, first fit et quelques
autres... Voir poru cela sous Solaris :

libmtmalloc, libbsdmalloc, libmalloc, libumem...

JKB

--
Si votre demande me parvient sur carte perforée, je titiouaillerai très
volontiers une réponse...
=> http://grincheux.de-charybde-en-scylla.fr

Le 02/05/2011 09:52, JKB a écrit :


À ma connaissance, ça n'existe pas. Un tel outil ne pourrait pas
simplement aller modifier tous les pointeurs valides sauf à
introduire des algorithmes complexes (et encore...).


Ok c'est bien ce que je pensais.
Donc les langages du type Java et autre qui utilisent un garbage
collector cache le pointeur dans la structure de l'objet afin de pouvoir
le modifier sans que cela n'ai d'incidence. le référence retourné c'est
finalement qu'un ID d'objet.

Comment fonctionne le C++ du coup ?
dispose t-il d'un garbage collector ?

Etienne

On Mon, 02 May 2011 11:30:42 +0200, Etienne :


Comment fonctionne le C++ du coup ?


Grosso modo, comme C.
C++ permet juste d'automatiser des trucs que tu fais manuellement en
C.


dispose t-il d'un garbage collector ?


Non. En théorie, on peut en rajouter un, mais je ne sais pas si c'est
utilisé : http://www.hpl.hp.com/personal/Hans_Boehm/gc/

Le 02/05/2011 17:21, Fabien LE LEZ a écrit :


On Mon, 02 May 2011 11:30:42 +0200, Etienne:


Comment fonctionne le C++ du coup ?


Grosso modo, comme C.
C++ permet juste d'automatiser des trucs que tu fais manuellement en
C.


Ok merci.

Un lundi de 2011, JKB (JKB) dans fr.comp.algorithmes :


À ma connaissance, ça n'existe pas. Un tel outil ne pourrait
pas simplement aller modifier tous les pointeurs valides sauf à
introduire des algorithmes complexes (et encore...).


Hein ? Une simple table de correspondance entre des références chaînées
(l'allocation réelle de la mémoire) et des pointeurs. Quelle
complication ? Une indirection de plus.

Bon ça demande d'ajuster le pattern des appels à malloc et à free mais il n'y a ruien de si compliqué que ça, si ?

exemples 4 zones de mémoires, 1, 2, 3, 4. 2 thread a b

tableau initial de correpondance
1 - 1 o
2 - 2 o
3 - 3 o
4 - 4 o

a demande une zone, reçoit 1
b demande une zone reçoit 2
1 - 1 x
2 - 2 x
3 - 3 o
4 - 4 o

a libère 1
le ramasse-miettes transfère le contenu de 2 vers 1 et le compacte

Tableau de correspondance

1 - p o @(1)<p?@(2)
2 - 1 x
3 - 3 o
4 - 4 o

b a toujours la même adresse pour la zone de mémoire allouée bien que
l'@ physique n'est pas la même.



--
Tous les paranoïaques me persécutent (Umberto Eco)

Poser votre question sur le forum Programmation

Questions similaires :