Speicheradressen im RAM



  • Hallo,
    ich habe ein paar Fragen und zwar:
    - Wie groß ist eine Speicheradresse im RAM?
    - Wie ermittelt man welche Adresse man grade nutzt?
    - Wie kann man Variablen verteilt (z.B. auf 0x1000000, 0x1000001, 0x1000002, 0x1000003) legen?

    LG



  • - Wie groß ist eine Speicheradresse im RAM?

    Ein x86-OS (32-bit protected-mode) kann bis zu 32-bit große Adressen adressieren. Also werden 32-bits (4 Bytes) benötigt. Bei AMD64 (long-mode) wären es 8 Bytes.

    - Wie ermittelt man welche Adresse man grade nutzt?
    - Wie kann man Variablen verteilt (z.B. auf 0x1000000, 0x1000001, 0x1000002, 0x1000003) legen?

    Wie meinst Du das? Die Adresse des aktuell ausgeführten Befehls liegt im Register IP/EIP/RIP. Wenn Du in Assembler programmierst, gibt es keine Variablen im engeren Sinne, Du kannst Platz reservieren mit db/dw/dd/dq. Die Adressen sind entsprechend fortlaufend. In C macht der Compiler das für dich.



  • Ich meine das so:
    Wenn ich eine Variable erstelle, ist die ja irgendwo im RAM und ich möchte wissen wo sie ist.

    Bei meiner letzten Frage habe ich mich doof ausgedrückt, ich möchte denn RAM in mehrere Blöcke aufteilen, und müsste deshalb dann z.B. 0x1000000, 0x1000001, 0x1000002 und 0x1000003 als eine Adresse zusammenbinden wenn jeder Block z.B. 4 Adressen hat.



  • Sorry, letzteres ist mir nicht ganz klar. Sieht irgendwie so aus, also wolltest Du einenen 4-Byte-Wert speichern.

    uint32_t* ptr = 0x1000000;

    Wenn Du den dereferenzierst, kriegst Du den uint32_t, der bei 0x1000000 liegt (und den Speicher von 0x1000000 bis 0x1000003 belegt)

    Den Speicherort einer Variablen bekommst Du (in C) mit dem Referenzierungsoperator &.

    void* ptr = &var;



  • Dieser Beitrag hat übrigens mit OS-Development meiner Meinung nach nichts zu tun, vielleicht könnte den mal jemand nach RudP verschieben.



  • Da es hier grade um Speicheradressen und RAM geht:
    Kann mann alle Adressen vom RAM speichern? Also nur denn Adressennamen, nicht denn Wert?



  • ja, denn die Adresse ist eine Zahl. Wenn Du aber jede einzelne Adresse speichern willst (also alle zugleich), ist (da jedes Byte addressierbar ist) dein RAM nicht nur vollständig voll, sondern Du bräuchtest das vierfache/achtfache (je nach Adresslänge).



  • Was ist denn bitte ein "Adressenname"?



  • Er meint sowas wie "Bahnhofsstraße 13", nur für Computer, vermute ich mal (also die Adresse). 😃



  • @Mr X
    Ich meinte das so, ich hab eine Datei auf dem Laufwerk in der die Adressen gespeichert z.B.:
    0x1000000
    0x1000001
    0x1000002

    Ist das möglich?



  • Ja, natürlich. Aber wozu?


Anmelden zum Antworten