Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 31/03/2007, à 16:18

brutor

C, Allocation virtuelle

En C, sous linux, quelle fonction permet d'allouer de la mémoire virtuelle?
Merci pour vos réponses.

Hors ligne

#2 Le 31/03/2007, à 16:44

tiky

Re : C, Allocation virtuelle

Tu as:

void * malloc( size_t size );

Cette fonction permet d'allouer de la mémoire, sinon pour libérer la mémoire c'est simplement:

void free( void * ptr );

note: il est conseillé de mettre le pointeur à NULL après un free et avant un malloc ainsi que de toujours vérifier si une allocation c'est bien passé.

Les 2 fonctions sont accessible depuis stdlib.h.


Conseil d'expert: il vous faut un dentifrice adapté...

Hors ligne

#3 Le 31/03/2007, à 18:59

brutor

Re : C, Allocation virtuelle

malloc et free sont des fonctions de la librairie standart du language C, ecrites à partir des fonctions du systèmes d'exploitation. Moi je veux la fonction du système d'exploition pour les allocation de mémoire virtuelle  car elle est plus performant que malloc pour de grosses allocations de mémoires.
Sous Windows c'est VirtualAlloc.

Hors ligne

#4 Le 31/03/2007, à 19:30

tiky

Re : C, Allocation virtuelle

brutor a écrit :

malloc et free sont des fonctions de la librairie standart du language C, ecrites à partir des fonctions du systèmes d'exploitation. Moi je veux la fonction du système d'exploition pour les allocation de mémoire virtuelle  car elle est plus performant que malloc pour de grosses allocations de mémoires.
Sous Windows c'est VirtualAlloc.

Ta question n'était pas claire du tout, je sais très bien qu'elles font partie de la librairie standard.
J'ai un gros livre sur la programmation C sous linux et dans le chapitre gestion de la mémoire il ne donne aucune autre fonction que malloc / free / etc... Maintenant si tu veux la fonction il suffit de télécharger les sources de la libc et de chercher le code de malloc wink


Conseil d'expert: il vous faut un dentifrice adapté...

Hors ligne

#5 Le 01/04/2007, à 01:03

Watchwolf

Re : C, Allocation virtuelle

http://www.koders.com/c/fid4AD816F7EF1026547DFC0567B02D2D912DCB8622.aspx

Hors ligne

#6 Le 01/04/2007, à 19:56

tiky

Re : C, Allocation virtuelle

@Watchwolf: je crois que ton code ne fonctionne que sous windows comme il est précisé dans le code.


Conseil d'expert: il vous faut un dentifrice adapté...

Hors ligne

#7 Le 02/04/2007, à 17:02

Watchwolf

Re : C, Allocation virtuelle

ah je n'avait pas regardé, dsl

enfin bon  dire que malloc() c'est lent je trouve ca byzarre qd mm. Sinon il n'a qu'a include de l'assembleur dans son code tongue

Hors ligne

#8 Le 02/04/2007, à 17:26

coca25

Re : C, Allocation virtuelle

je crois que l'equivalent est mmap
http://www.linux-kheops.com/doc/man/manfr/man-html-0.9/man2/mmap.2.html
mais ce n'est interessant que si la memoire alloué doit etre accessible par plusieurs process

Hors ligne

#9 Le 02/04/2007, à 19:29

tiky

Re : C, Allocation virtuelle

Les instructions qu'exécute malloc() en plus d'allouer la mémoire sont très importantes, en lisant quelques lignes du code de la glibc, j'ai pu voir qu'il y avait pas exemple des lock() et unlock() un peu partout, ils sont sans doute pas là pour faire jolie mais par exemple pour éviter des accès concurrentielles. En plus ces instructions ne sont exécuté qu'une fois pour chaque l'allocation, donc pour optimiser ton programme il faut chercher à faire le moins de malloc() possible mais de plus grande taille ( je dis ça mais je suis peut-être complètement à côté de ce que tu veux faire ).


Conseil d'expert: il vous faut un dentifrice adapté...

Hors ligne