RAM und CPU herausfinden



  • SeppJ schrieb:

    Da waere ich mir gar nicht so sicher. Es gibt Optimierungen, bei denen 32-Bit Zeiger in 64-Bit Anwendungen benutzt werden, wenn der Compiler beweisen kann, dass in dem Codeabschnitt 32 Bit reichen und das dann irgendwie flotter ist.

    Das will ich sehen, glaube ich nicht.


  • Mod

    Tim06TR schrieb:

    Ob deine Anwendung 32 oder 64 bit ist kannst du über die Größe eines Zeigers feststellen.

    Das hängt allerdings auch davon ab, was genau hier mit 32 bzw. 64 bit gemeint ist.
    Die x32-ABI (für x86_64) beispielsweise verwendet 32bit für int,long und Zeiger (ILP32), während der Prozessor tatsächlich im Long-Modus läuft und somit u.a. auf den größeren Registersatz zugreifen kann.

    cooky451 schrieb:

    SeppJ schrieb:

    Da waere ich mir gar nicht so sicher. Es gibt Optimierungen, bei denen 32-Bit Zeiger in 64-Bit Anwendungen benutzt werden, wenn der Compiler beweisen kann, dass in dem Codeabschnitt 32 Bit reichen und das dann irgendwie flotter ist.

    Das will ich sehen, glaube ich nicht.

    Da bin ich auch skeptisch.


  • Mod

    cooky451 schrieb:

    SeppJ schrieb:

    Da waere ich mir gar nicht so sicher. Es gibt Optimierungen, bei denen 32-Bit Zeiger in 64-Bit Anwendungen benutzt werden, wenn der Compiler beweisen kann, dass in dem Codeabschnitt 32 Bit reichen und das dann irgendwie flotter ist.

    Das will ich sehen, glaube ich nicht.

    http://stackoverflow.com/questions/14550626/64-bit-gcc-mixing-32-bit-and-64-bit-pointers



  • Das ist auch nur ein kreativer Weg ein Register zu beschreiben, aber nichts wird tatsächlich so im RAM gespeichert. In der Realität ist es natürlich auch relativ unmöglich diese Optimierung durchzuführen, weil so gut wie alles was tatsächlich in reservierten Speicher gelegt wird in einem struct/array ist deren Größe man nicht ändern kann. Da sizeof(void*) allerdings eh zur Compilezeit ausgeführt wird, dürfte das relativ irrelevant sein, sizeof(void*) funktioniert immer.


  • Mod

    Darueber hinaus kennt der GCC fuer x86-64 noch die Option -mx32, welche x86-64 Code erzeugt, aber 32 Bit Pointer benutzt.



  • Um vielleicht mal aufs eigentliche Problem zurückzukommen: Was genau hast du mit diesen Informationen vor? Ich frage das, um alternative Lösungswege vorzuschlagen, denn: Architekturen gibt es wie Sand am Meer, und auf alle vorbereitet zu sein, schafft man am sinnvollsten, indem man sich nicht auf ihre Details verlässt. Die Information, dass du gerade auf einem Sitara AM335x Cortex-A8 läufst, ist allenfalls für statistische Zwecke interessant, wohingegen die Information, wieviele Prozessorkerne dir zur Verfügung stehen, praktisch verwendbar ist. Was ist es, das du eigentlich von der Maschine wissen willst?



  • Ob deine Anwendung 32 oder 64 bit ist kannst du über die Größe eines Zeigers feststellen.

    Darauf würde ich nicht wetten.

    Auf meinem 16Bit Mikrokontroller kann ich mittels char _far* p; einen 24 Bit Zeiger erzeugen.

    @Problemi:
    Ohne Rücksprache mit dem Betriebssystem sehe ich keine Chance das festzustellen.

    Vielleicht hast du Glück und eine Lib wie QT hat das schon implementiert.



  • @Bitte ein Bit
    Ja.

    Mit sizeof(void*) bekommt man die Grösse "normaler" ("near") Zeiger. Die muss natürlich nicht mit der Registerbreite übereinstimmen, und auch keinen Rückschluss auf die Grösse des insgesamt adressierbaren Bereichs zulassen. (16 Bit DOS Compiler hatten ja oft ein "huge" Modell, in dem alle Zeiger 32 Bit waren, konnten dabei aber trotzdem nur 1 MB adressieren (16 Bit Segment << 4 + 16 Bit Offset))

    Davon abgesehen ist sizeof(void*) bei einem 32 Bit Windows Programm das unter WoW64 läuft trotzdem 4. Wenn wissen möchte ob man eine 64 Bit CPU hat, kann man sizeof(void*) sowie sämtliche Präprozessor-Makros also sowieso vergessen. Da hilft nur das OS fragen, oder CPU- und compilerabhängige Funktionen bzw. Inline-Assembler verwenden.



  • Davon abgesehen ist sizeof(void*) bei einem 32 Bit Windows Programm das unter WoW64 läuft trotzdem 4.

    Es war ja auch die Rede festzustellen, ob das eigene Program unter 32 oder 64 bit läuft.

    Was im Nachhinein auch etwas widersinnig ist...



  • Bitte ein Bit schrieb:

    Davon abgesehen ist sizeof(void*) bei einem 32 Bit Windows Programm das unter WoW64 läuft trotzdem 4.

    Es war ja auch die Rede festzustellen, ob das eigene Program unter 32 oder 64 bit läuft.

    Deswegen hab ich ja auch "Ja." geschrieben, und nicht "Nein." oder "Nicht ganz." 😉
    War als Ergänzung gedacht, nicht als Korrektur.


Anmelden zum Antworten