malloc, calloc, realloc und free



  • Ich habe bisher immer c++ programmiert und habe dabei eigentlich auch c recht umfangreich kennengelernt. Was mir noch fehlt sind Kenntnisse über die Funktionen malloc,calloc,realloc und free...

    1. Frage
    Was ist der Unterschied zwischen calloc und free, sind das möglicherweise synonyme ???
    2. Frage
    Was genau macht realloc ??? folgendes stelle ich mir vor:
    Die Funktion prüft, ob noch weiterer Speicher im selben Block allozirt werden kann und tut dies falls möglich. Falls dies nicht möglich ist, wird neuer Speicher + dem angeforderten zusätzlichen Speicher in einem neuen Block alloziert. Kommt das in etwa hin ???

    3. Ich denke mal diese Funktionen sind in asm programmiert, oder ist das auch in c möglich ??? Also ich denke nicht ???

    So das wars auch schon, vielen Dank
    mfg Ishildur



  • Original erstellt von Ishildur:
    1. Frage
    Was ist der Unterschied zwischen calloc und free, sind das möglicherweise synonyme ???

    Ne, calloc reserviert speicher (und initialisiert in mit 0) während free speicher frei gibt!

    2. Frage
    Was genau macht realloc ??? folgendes stelle ich mir vor:
    Die Funktion prüft, ob noch weiterer Speicher im selben Block allozirt werden kann und tut dies falls möglich. Falls dies nicht möglich ist, wird neuer Speicher + dem angeforderten zusätzlichen Speicher in einem neuen Block alloziert. Kommt das in etwa hin ???
    [quote]
    realloc allokiert soviel Speicher wie es soll - notfalls wird der bereits bestehende Speicher in den neuen kopiert!
    im grunde also ein
    new=new T[...]
    copy(alt,neu)
    delete alt

    [quote]3. Ich denke mal diese Funktionen sind in asm programmiert, oder ist das auch in c möglich ??? Also ich denke nicht ???

    ARGH, schon wieder einer, der ASM für den Gott hält!
    Nein, diese funktionen sind wie new und delte - vielleicht asm, vielleicht auch nicht!
    Wahrscheinlich aber einfach Kernel calls!



  • Also ich denke doch das new immer neuen Speicher anlegt, selbst wenn der Speicher auch erweitert werden könnte, ohne den Speicherblock zu verschieben ???



  • jo, new allokiert immer neu - aber realloc ist da kaum effizienter! Es ist zwar theoretisch Möglich, dass noch Platz ist, ohne den Speicher zu verschieben. Aber meistens wird eh verschoben werden müssen.



  • 3. Ich denke mal diese Funktionen sind in asm programmiert, oder ist das auch in c möglich ??? Also ich denke nicht ???

    klar ist das moeglich. das betriebssystem ist fuer die speicherverwaltung zustaendig, malloc muss nur nen system call aufrufen um speicher zu bekommen, malloc verwaltet den zugeteilten speicher dann oft mit zum beispiel power of 2 lists. im kernel selbst wird wohl die kommunikation mit der mmu in assembler geschrieben sein, der rest ist auch da c.



  • Im alten Testament (K&R I ;)) werden 2 Implementationen einer Funktion alloc() angegeben (malloc gabs damals auch noch nicht)


Anmelden zum Antworten