Liste aller Speicheradressen



  • Hallo,
    ich hoffe das ich hier richtig bin,
    also ich suche ein Liste wo alle Adressen vom RAM drin stehen.

    Bye





  • Wie soll das helfen?



  • Das ist ganz einfach:
    Alle möglichen Werte von 1 bis Größe Ram in Byte.


  • Mod

    Nathan schrieb:

    Das ist ganz einfach:
    Alle möglichen Werte von 1 bis Größe Ram in Byte.

    0 ist auch eine gültige Adresse. Man hat sich bloß per Konvention da drauf geeinigt, dass dort niemals Objekte des Anwendungscodes liegen können. Und die höchste gültige Adresse ist unabhängig von der Hardware (Speicher ist schließlich auf fast jedem System virtualisiert!), sondern (bei normalen Anwendungsprogrammen) durch so etwas wie numeric_limits<size_t>::max() gegeben (also den darstellbaren Werten eines Zeigers).



  • SeppJ schrieb:

    Und die höchste gültige Adresse ist unabhängig von der Hardware (Speicher ist schließlich auf fast jedem System virtualisiert!), sondern (bei normalen Anwendungsprogrammen) durch so etwas wie numeric_limits<size_t>::max() gegeben (also den darstellbaren Werten eines Zeigers).

    Nicht einmal das. Bei manchen Prozessoren werden die oberen Bits der Adresse gar nicht ausgewertet. Zudem stehen auch bestimmte Bitbereiche (üblicherweise die obere Hälfte) dem Betriebssystem fest zu, sodass man sie als normales Programm gar nicht bekommen kann.


  • Mod

    Marthog schrieb:

    SeppJ schrieb:

    Und die höchste gültige Adresse ist unabhängig von der Hardware (Speicher ist schließlich auf fast jedem System virtualisiert!), sondern (bei normalen Anwendungsprogrammen) durch so etwas wie numeric_limits<size_t>::max() gegeben (also den darstellbaren Werten eines Zeigers).

    Nicht einmal das. Bei manchen Prozessoren werden die oberen Bits der Adresse gar nicht ausgewertet. Zudem stehen auch bestimmte Bitbereiche (üblicherweise die obere Hälfte) dem Betriebssystem fest zu, sodass man sie als normales Programm gar nicht bekommen kann.

    Davon bekommt ein Anwendungsprogramm nichts mit. Das ist Hardware- und OS-Sache. Das Anwendungsprogramm sieht seinen virtualisierten Speicher. Der ist leer und geht über den gesamten Adressbereich.

    Wenn du selber ein Betriebssystem programmierst, ist die Antwort natürlich eine ganz andere.



  • SeppJ schrieb:

    0 ist auch eine gültige Adresse. Man hat sich bloß per Konvention da drauf geeinigt, dass dort niemals Objekte des Anwendungscodes liegen können.

    Es ist möglich, Objekte des Anwendungscodes auf 0 abzulegen. Einfach mmap auf 0 machen (geht mit root-Rechten).



  • MirrorToday schrieb:

    Hallo,
    also ich suche ein Liste wo alle Adressen vom RAM drin stehen.

    unter L*n*x kann man sich eine Liste der RAM-Adressen ungefähr so geben:

    seq $(expr 1024 \* $(grep MemTotal /proc/meminfo|awk '{print $2}'))
    

    (Achtung, kann hohe CPU-Last erzeugen)



  • SeppJ schrieb:

    Davon bekommt ein Anwendungsprogramm nichts mit. Das ist Hardware- und OS-Sache. Das Anwendungsprogramm sieht seinen virtualisierten Speicher. Der ist leer und geht über den gesamten Adressbereich.

    In Windows ist es zum Beispiel nicht möglich, dass ohne gesetzten LargeAddress-flag 32-bit-Programme eine virtuelle Speicheraddresse mit einer 1 am Anfang bekommen.
    Außerdem: https://en.wikipedia.org/wiki/AMD64#Canonical_form_addresses



  • großbuchstaben schrieb:

    unter L*n*x kann man sich eine Liste der RAM-Adressen ungefähr so geben: ... /proc/meminfo ...

    Wenn man anfängt, Linux-only als L*n*x zu bezeichnen, dann mag das insofern stimmen, dass Linux das einzige OS ist, das auf L*n*x matcht. Bitte mit den Sternchen aufhören!



  • LynxOS matcht auch.
    Aber ja, L*n*x ist plem, k.A. wem das eingefallen ist.

    *nix ist auch komisch, aber wenigstens halbwegs üblich und funktioniert auch immerhin für MINIX und Xenix.

    -----

    SeppJ schrieb:

    Das Anwendungsprogramm sieht seinen virtualisierten Speicher. Der ist leer und geht über den gesamten Adressbereich.

    Ich denke der OP will vermutlich wissen wie er eine Liste von "committeten" Adressbereichen bekommt. Also welche wo wirklich "RAM dahinter liegt".


  • Mod

    hustbaer schrieb:

    SeppJ schrieb:

    Das Anwendungsprogramm sieht seinen virtualisierten Speicher. Der ist leer und geht über den gesamten Adressbereich.

    Ich denke der OP will vermutlich wissen wie er eine Liste vom "committetem" Adressbereichen bekommt. Also welche wo wirklich "RAM dahinter liegt".

    Jetzt hör doch auf, die schlecht gestellte Frage gut zu interpretieren. Sonst lernt er doch nicht, Fragen richtig zu stellen :p .

    Aber da nun die Katze aus dem Sack ist und die wohl eigentlich gewünschte Frage gestellt wurde, können wir die Scherzantworten sein lassen und diese eigentliche Frage beantworten. Dazu ist aber, wie bei allen Fragen dieser Art, erst einmal die übliche Gegenfrage nötig: Welches System?



  • /proc/user schrieb:

    Wenn man anfängt, Linux-only als L*n*x zu bezeichnen, dann mag das insofern stimmen, dass Linux das einzige OS ist, das auf L*n*x matcht. Bitte mit den Sternchen aufhören!

    du kennst meine privaten L*n*x-Distros noch nicht: Latern*x (aufgehellte Icons), Labern*x (Speech-synthi-Pakete deinstalliert), Lin* (ohne x, nachdem ich die X-Pakete deinstalliert habe 😞 ) 😋


Anmelden zum Antworten