Fragen zu Heap und Files: Dringend!



  • Hallo,
    bräuchte mal Hilfe bei einigen Verständnisproblemen:
    1. Der Stack wird nach meiner Kenntnis weit oben (Adressenbezogen) im Speicher gelegt (weg von Daten und Code Segment).
    - wo kommt der Heap hin?
    - wächst der Heap auch "rückwärts" zu den niederwertigen Adressen

    2. Files:
    - Wohin wird der Puffer geschrieben? Also ich geb etwas ein (stdin) mit Enter wird das in einen Puffer geschrieben, wo liegt der Puffer?
    - Was GENAU macht foef (ich weiß, dass es 1 zurück gibt wenn EOF erreicht ist, aber wie genau?)
    - Was ist "EOF" (end of file), c=fgets(file), if(c==EOF), mir ist klar, dass es true ist, wenn die Datei "leergelesen" wird, aber was für Daten sind EOF?

    3. Nochmal zum Heap usw.
    - Im Heap (dynamischer Speicher) wird speicher reserviert usw. Auf dem Stack liegen lokale Variablen, die nach dem Beenden der jeweiligen Funktion gelöscht werden. Datensegment enthält static und global. Könnt ihr mir dazu noch mehr sagen?



  • noch eine Frage:
    wenn ich Speicher auf dem Heap reserviere, wo wird dann "geklärt(gesichert)", dass dieser Speicher vergeben ist?



  • Szill schrieb:

    noch eine Frage:
    wenn ich Speicher auf dem Heap reserviere, wo wird dann "geklärt(gesichert)", dass dieser Speicher vergeben ist?

    der heap-code 'merkt' sich das. er hat z.b. eine struct, in der steht, wie viel noch frei ist, wo der nächste freie block beginnt, usw.
    🙂



  • Das meiste kannst du wahrscheinlich bei Wiki nachlesen. http://de.wikipedia.org/wiki/End_of_File zum Beispiel.
    Vieles ist auch systemabhängig und wird versteckt. Zum Beispiel will man niemandem sagen in welche Richtung der Heap wächst, dann kann man das nämlich mal ändern und keiner merkt es. Soweit ich weiß wachsen Stack und Heap in gegensätzliche Richtungen aufeinander zu, aber das ist praktisch eigentlich nicht relevant.
    Vom Rest habe ich nicht genug Ahnung um eine halbwegs sichere Antwort zu geben.



  • Szill schrieb:

    - Was ist "EOF" (end of file), c=fgets(file), if(c==EOF), mir ist klar, dass es true ist, wenn die Datei "leergelesen" wird, aber was für Daten sind EOF?

    EOF ist oft definiert als

    #define EOF (-1)
    

    und kein Wert, der in der Datei steht sondern von fgetc zurückgegeben wird, wenn es keine Zeichen mehr zum Einlesen gibt.



  • Big Brother schrieb:

    und kein Wert, der in der Datei steht sondern von fgetc zurückgegeben wird, wenn es keine Zeichen mehr zum Einlesen gibt.

    der trick dabei ist, dass alle gültigen zeichen positiv sind. dewegen nimmt man gern -1 für EOF.
    🙂


Anmelden zum Antworten