GNU/Linux >> Tutoriels Linux >  >> Linux

Est-ce que malloc/free est un appel système ou une routine de bibliothèque fournie par libc ?

Très souvent, malloc et free utilisent des services d'allocation de mémoire virtuelle de niveau inférieur et allouent plusieurs pages (ou même des mégaoctets) à la fois, en utilisant des appels système comme mmap et munmap (et peut-être sbrk). Souvent malloc préfère réutiliser précédemment free d'espace mémoire le cas échéant. La plupart des malloc les implémentations utilisent des stratégies diverses et différentes pour les "grandes" et les "petites" allocations, etc...

Notez que l'espace d'adressage virtuel peut être limité, par ex. avec setrlimit(2). Utilisez sous Linux pmap(1) et proc(5) pour en savoir plus sur l'espace d'adressage virtuel de certains processus (par exemple /proc/self/maps pour le vôtre ou /proc/1234/maps - aussi le pmap 1234 commande - pour le processus de pid 1234).

Vous pouvez consulter le code source de votre GNU libc, consulter le code source d'autres bibliothèques standard C (telles que musl-libc), lire à propos de malloc implémentations, choisissez-en d'autres ou implémentez la vôtre, ou utilisez strace pour le découvrir expérimentalement.

Lisez la page de manuel de syscalls (c'est-à-dire syscalls(2)) et le fichier <asm/unistd.h> pour une liste des appels système.

un malloc très rapide

Je crois fermement que la norme C est très vague à propos de malloc et free . Je suis à peu près sûr que les fonctions suivantes respectent la lettre (mais pas l'esprit) de la norme :

 /* politically incorrect, but very probably standard conforming */
 void *malloc (size_t sz) { if (sz>0) errno = ENOMEM; return NULL; }
 void free(void*ptr) { }

Bien sûr, vous coderez calloc et realloc en conséquence.

La libc GNU vous donne des crochets pour votre propre malloc fonctions (et vous pourriez même probablement utiliser le Garbage Collector de Boehm de manière transparente à travers elles). Ces crochets pourraient devenir obsolètes et ne sont pas standard.

Si vous utilisez GNU libc, regardez également mallinfo(3) et malloc_stat(3) et les fonctions associées.


malloc et free sont des fonctions de bibliothèque C standard qui doivent être implémentées par chaque implémentation C.

La norme C définit uniquement la manière dont ces fonctions se comportent et le comportement attendu d'elles. Comment ils doivent être mis en œuvre à gauche de chaque mise en œuvre.

En bref, ce sont des détails d'implémentation de l'implémentation que vous utilisez.

(Une "implémentation" se compose du compilateur, de l'éditeur de liens, de la bibliothèque d'exécution et probablement de quelques autres éléments.)


Linux
  1. Comment installer la bibliothèque Ncurses sous Linux

  2. Les 5 meilleurs logiciels de gestion de bibliothèque gratuits et open-source

  3. Nagios XI Review (Noyau Nagios gratuit contre Nagios XI)

  4. libre :commande introuvable

  5. Que retourne malloc(0) ?

Commande gratuite sous Linux

25 livres gratuits pour apprendre Linux gratuitement

exemples de commandes gratuits sous Linux

Forcer free() à renvoyer la mémoire malloc au système d'exploitation

Utiliser une bibliothèque C dans Swift sous Linux

Comment installer les pages de manuel pour les fonctions de la bibliothèque standard C dans Ubuntu ?