GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Ist malloc/free ein Systemaufruf oder eine von libc bereitgestellte Bibliotheksroutine?

Sehr oft, malloc und free verwenden virtuelle Speicherzuweisungsdienste auf niedrigerer Ebene und weisen mehrere Seiten (oder sogar Megabytes) auf einmal zu, indem sie Systemaufrufe wie mmap und munmap (und vielleicht sbrk) verwenden. Oft malloc zieht es vor, vorher wiederzuverwenden free d Speicherplatz, falls relevant. Die meisten malloc Implementierungen verwenden verschiedene und unterschiedliche Strategien für "große" und "kleine" Allokationen usw....

Beachten Sie, dass der virtuelle Adressraum begrenzt sein kann, z. mit setrlimit(2). Verwenden Sie unter Linux pmap(1) und proc(5), um mehr über den virtuellen Adressraum einiger Prozesse zu erfahren (z. B. /proc/self/maps für Ihr eigenes oder /proc/1234/maps - auch die pmap 1234 Befehl - für den Prozess von PID 1234).

Sie könnten sich Ihren GNU-Libc-Quellcode ansehen, in den Quellcode anderer C-Standardbibliotheken (wie etwa musl-libc) schauen, über malloc lesen Implementierungen, wählen Sie andere oder implementieren Sie Ihre eigenen oder verwenden Sie strace, um es experimentell herauszufinden.

Lesen Sie die syscalls Manpage (d.h. syscalls(2)) und die Datei <asm/unistd.h> für eine Liste von Systemaufrufen.

ein sehr schnelles malloc

Ich glaube fest daran, dass der C-Standard bezüglich malloc sehr vage ist und free . Ich bin mir ziemlich sicher, dass die folgenden Funktionen den Buchstaben (aber nicht den Geist) des Standards respektieren:

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

Natürlich codieren Sie calloc und realloc entsprechend.

Die GNU libc gibt Ihnen Hooks für Ihren eigenen malloc Funktionen (und Sie könnten wahrscheinlich sogar Boehms Garbage Collector transparent durch sie verwenden). Diese Hooks könnten veraltet sein und sind nicht standardisiert.

Wenn Sie die GNU libc verwenden, sehen Sie sich auch mallinfo(3) und malloc_stat(3) und verwandte Funktionen an.


malloc und free sind Standard-C-Bibliotheksfunktionen, die von jeder C-Implementierung implementiert werden müssen.

Der C-Standard definiert lediglich, wie sich diese Funktionen verhalten und welches Verhalten von ihnen erwartet wird. Wie sie zu implementieren sind, bleibt der jeweiligen Implementierung überlassen.

Kurz gesagt handelt es sich um Implementierungsdetails der von Ihnen verwendeten Implementierung.

(Eine "Implementierung" besteht aus dem Compiler, dem Linker, der Laufzeitbibliothek und wahrscheinlich ein paar anderen Dingen.)


Linux
  1. So installieren Sie die Ncurses-Bibliothek unter Linux

  2. Die 5 besten kostenlosen und Open-Source-Bibliotheksverwaltungssoftware

  3. Nagios XI Review (Kostenloser Nagios-Core vs. Nagios XI)

  4. Was gibt malloc(0) zurück?

  5. Code für Malloc und kostenlos

Kostenloser Befehl unter Linux

25 kostenlose Bücher, um Linux kostenlos zu lernen

kostenlose Befehlsbeispiele in Linux

Erzwingen Sie free(), um Malloc-Speicher an das Betriebssystem zurückzugeben

Verwenden Sie eine C-Bibliothek in Swift unter Linux

Wie installiert man Manpages für C-Standardbibliotheksfunktionen in Ubuntu?