'jour,
Pour le fun, je code un petit malloc.
J'ai voulu implenter mmap() pour les grosse allocation, qui permet de liberer via munmap() la memoire directement au free() ce que ne permet pas sbrk() si la zone mémoire n'est pas en derniere position, ceci dnas le but de ne pas avoir de trop gros morceau de mémoire libre inutilisé.
Avant d'implenter mmap() le malloc marcher très bien qu'avec sbrk, je pouvais lancer VLC et lire un video etc.
D'ailleur si l'on commente les lignes qui apelle mmap() (lignes :263-264-265):
//if ((2 << id) >= MMAP_SIZE)
//block = mem_extend_mmap (size);
//else
Tous marche très bien
Niveau thread j'ai utiliser les test de ptmalloc
t-test1 total_thread 1000 - 100 thread - n_alloc 1500 - taille max 173987: http://simpp-kode.tuxfamily.org/malloc_test/t-test1.txt
t-test2 total_thread =1000 threads=100 n_alloc=5008 sizemax=173987 : http://simpp-kode.tuxfamily.org/malloc_test/t-test2.txt
et mon test avec de grosse alloc voici le .c = http://simpp-kode.tuxfamily.org/mall...alloc_test.txt
tous ses tests marche bien
Seulement, quand je lance gimp, pidgin, vlc, xchat ... tous segfault, et plus je monte la valeur MMAP_SIZE qui determine quand mmap() sera utiliser, moin cela segfault ...
Voici le code : http://svn.tuxfamily.org/viewvc.cgi/...e=text%2Fplain
J'ai très certainement du louper un épisode ... j'ai bien sur tester l'alignement ainsi que la taille utiliser pour mmap() et comparer avec dlmalloc-2.6 tous est correcte, je n'ais pas laisser les tests dans le code, est les fprintf de debugage ne me dise rien au segfault.
Donc si quelqu'un aurait une piste ? idée ?
Merci.
Edit:
Comme le code est asser long, il suffit de regarder les fonction mem_extend_mmap() smalloc() et sfree() et mem_free() les seul qui on un rapport avec mmap, le reste utilise sbrk qui lui mache bien.
Edit2:
Le sujet ne semble pas passionner les foule, j'ai mi un macro _MEM_MMAP qui "isole" les partie utilisant mmap, peut toujours servire a voir ou cela change quelque chose dnas le code
Partager