malloc, wozu?



  • Was macht man eigentlich mit der malloc Funktion? Was bringt es mir Variablen oder Arrays in den Heap zu laden?



  • Hat sich noch keiner von euch gedanken dazu gemacht?



  • INTEGER schrieb:

    Was macht man eigentlich mit der malloc Funktion?

    Nichts, man benutzt den new-Operator.

    Was bringt es mir Variablen oder Arrays in den Heap zu laden?

    Du kannst die Lebensdauer selbst festlegen, im Gegensatz zu Objekten auf dem Stack, die am Ende ihres umschließenden Blockes zerstört werden. Und natürlich, du kannst Arrays verwenden, deren Größe erst zur Laufzeit fest steht.



  • Und du hast auf dem Heap mehr Platz als auf dem Stack, daher solltest du sehr
    große Objekte auf dem Heap ablegen. Gab dazu erst vor kurzem nen Thread, musst
    mal bischen mit der Suchfunktion spielen.



  • Man muß noch sagen, das malloc eine C-Funktion ist (oder fällt malloc unter die Schlüsselwörter? Habe nie C gelernt...) und im C++ Kontex ist es somit bedeutungslos.

    Wie die Kollegen schon sagen, in C++ benutzt man dafür das new-Schlüsselwort.



  • malloc Schlüsselwort?
    Um, da sind aber Klammern drum und man muss casten, also das erscheint mir für ein Schlüsselwort komisch *rolleyes*



  • Deshalb frage ich ja, ich habe nie C gelernt (bin von Assembler auf C++) und somit kenne ich malloc nur vom hören sagen. Sprich: ich habe es nie verwendet und ich sehe es auch nie in meiner Literatur gesehen oder etwas darüber gelesen. Aber ich weiß, das es nicht zu C++ gehört.

    Wenn es eine Funktion ist, gut.



  • malloc gibt übrigens, falls Dich das interessiert, einen Zeiger auf den allokierten Speicherbereich zurück.



  • Bashar schrieb:

    INTEGER schrieb:

    Was macht man eigentlich mit der malloc Funktion?

    Nichts, man benutzt den new-Operator.

    aha, und der new operator benutzt ja malloc, wie man hier in dem Thread gut sehen konnte:
    http://www.c-plusplus.net/forum/viewtopic.php?t=68536&highlight=malloc+benutzt+new



  • Nein, eine spezielle Implementierung der Funktion operator new() benutzt malloc. Bevor du weiter stänkerst mögest du dich mit dem Unterschied zwischen operator new() und dem new-Operator auseinandersetzen und den Begriff beobachtbares Verhalten in Verbindung mit der «as if»-Regel erörtern.



  • Mis2com schrieb:

    malloc Schlüsselwort?
    Um, da sind aber Klammern drum und man muss casten, also das erscheint mir für ein Schlüsselwort komisch *rolleyes*

    Also in C musste man meines Wissens noch nie den Rückgabewert von malloc casten und in C++ soll man es nicht.



  • MaSTaH schrieb:

    Also in C musste man meines Wissens noch nie den Rückgabewert von malloc casten und in C++ soll man es nicht.

    In C++ wird man um den cast aber nicht herumkommen...



  • Nein, eine spezielle Implementierung der Funktion operator new() benutzt malloc. Bevor du weiter stänkerst mögest du dich mit dem Unterschied zwischen operator new() und dem new-Operator auseinandersetzen und den Begriff beobachtbares Verhalten in Verbindung mit der «as if»-Regel erörtern.

    Muss nicht bedeuten, dass new malloc benutzt. Kann auch sein, dass beide auf die gleichen OS Funktionen zurückgreifen. Unter Win32 wird sehr oft HeapAlloc benutzt.

    Und unter C is malloc eine Funktion.



  • malloc gibt man die Größe in Bytes an die man anlegen will. Bei new gibt man die Anzahl an. Malloc wirft keine expceptions im Gegensatz zum new.

    unsigned long *pArray = malloc( 10 * sizeof( unsigned long ) );
    
    unsigned long *pArray = new unsigned long[ 10 ];
    

    bei new wird des Konstruktor ausgeführt bei malloc nicht.

    CKlasse *pArray = malloc( 10 * sizeof( CKlasse ) );
    

    ruft CKlasse::CKlasse nicht auf

    CKlasse *pArray = new CKlasse[ 10 ]
    

    ruft CKlasse::CKlasse bei jedem der 10 Elemente auf


Anmelden zum Antworten