Anfänger Frage zu Pointer und malloc



  • Hallo,
    Wie bereits erwähnt will ich mich in c versuchen. Jetzt bin ich auf zwei Sachen gestossen die ich zwar verstanden hab aber noch nicht so ganz verstehe für was sie gut sind?
    Einmal Zeiger und die speichrreservierung.
    Dienen Pointer lediglich dazu den Speicherplatz gering zu halten oder was andres?
    Bei der Reservierung fallt mir gar nix ein. Wann brauche ich denn ein festen Speicherplatz für ein wert????

    Aber wie gesagt ih fang ja erst an und evtl hat jemand Lust mit das näher zu bringen.

    Grüsse lars



  • Zeiger brauchst du sehr oft in Verbindung mit malloc. Mit malloc bekommst du zur Laufzeit neuen Speicher, das brauchst du zum Beispiel, wenn nicht feststeht, wie viel Speicher du einmal brauchen wirst, oder wenn du Datenstrukturen implementierst.
    Mit Zeigern kannst du auch über Strings oder Arrays iterieren 😉



  • Hmmm.
    Aber in dem Moment Wenn ich ein Int zb initialiesiere wird ihm doch eh Speicher zugewiesen. Dabei weiss er doch wieviel Speicher er benötigt.

    Wie gesagt mir fehlt im Moment einfach die Vorstellungskraft für was ich das brauch.



  • LarsRosen schrieb:

    Wenn ich ein Int zb initialiesiere wird ihm doch eh Speicher zugewiesen.

    Es geht bei malloc auch nicht um ein Datenelement sondern um größere Bereiche. Z.B. für ein Array und/oder Strukturen, ein Bild, ein Text oder eine ganze Datei.

    Zeiger brauchst du auch um aus einer Funktion heraus Daten zu ändern. Als Beispiel mal strcpy oder scanf.



  • Zeiger brauchst Du weil C keine Arrays als Datentypen kennt. So wird hier

    int test(char array[])
    {
    }
    

    auch nur ein Zeiger übergeben. Würdest du den Wert eines Elements von "array" ändern, so würde dieser auch in der aufrufenden Funktion geändert.

    Dynamische Speicherreservierung wird sinnvoll wenn man vorher nicht sagen kann wie viel Speicher gebraucht wird, oder wenn dein Programm sehr viel Speicher benötigt. (Der Stack ist nur ca. 1MB groß.)

    Wenn Du zB. Bilder in den RAM lädst wäre der Stack hier sehr ungeeignet. Erstens müsste die Größe vorher feststehen und zweitens würde ein 5MB großes Bild schon nicht mehr auf den Stack passen.

    http://de.wikipedia.org/wiki/Stapelspeicher
    http://de.wikipedia.org/wiki/Dynamischer_Speicher

    Die englischen Artikel sind oft noch detaillierter.



  • Also wenn ich mich nun richtig durch gewoschtelt hab bin ch bei folgendem Ergebnis.
    Malloc ist dann wichtig wenn beim Zeitpunkt des kompilierens nicht fest steht wie gross das Objekt mal sein wird. So wie ein Bild oder Text.

    Nur was ich noch nicht so ganz verstanden hab welcher Speicher ist das? RAM, CPU register? Oder temp RAM?



  • RAM. Genauer vom Heap.

    Dank der MMU gibt es aber für das Programm keinen Unterschied zwischen RAM und temp. RAM.

    Beim Zugriff auf ausgelagerten Speicher muss das OS halt den Bereich wieder ins RAM holen und anderen Speicher auslagern. Das dauert aber.


Log in to reply