64Bit Software doppelter RAM Verbrauch

  • Allgemein

Es gibt 11 Antworten in diesem Thema. Der letzte Beitrag () ist von petaod.

    64Bit Software doppelter RAM Verbrauch

    Hey Leute ,
    wodurch kommt es das x64 Software doppelt soviel RAM braucht wie x86 ? Kann man durch Optimierungen den RAM Verbrauch senken?Was für Vorteile hat x64 noch für den normalen Benutzer?

    *Topic verschoben*

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Marcus Gräfe“ ()

    Alle Pointer sind doppelt so groß.
    Bei .Net ändert sich sonst nicht so viel, weil alle Datentypen eindeutig definiert sind.
    Allerdings habe ich gehört, dass z.B. bei C der Datentyp "int" beim Kompilieren auf 32 Bit 32 Bit groß ist und beim Kompilieren auf 64 Bit 64 Bit groß ist. Das könnte auch ein Grund sein.

    64 Bit Systeme haben den Vorteil, dass sie mehr Speicher addressieren können. Bei Speicherfressenden Anwendungen (z.B. Spielen oder Virtualisierung) kann man so mehr Speicher reservieren.
    Bei 32 Bit wäre das 2^32 Bytes, also ca. 4 GiB.
    Bei 64 Bits wäre das 2^64 Bytes. Und das wären so in der Größenordnung 16 Exabytes. Also mehr, als man an einem Tag in den Arbeitsspeicher laden kann ;)
    "Luckily luh... luckily it wasn't poi-"
    -- Brady in Wonderland, 23. Februar 2015, 1:56
    Desktop Pinner | ApplicationSettings | OnUtils
    Hallo,

    So weit ich weß ist es quatsch das der RAM doppelt so viel verbraucht wird auf x64, man hat zwar größere Pointer, aber x64 bit kann wie schon angesprochen mehr ram adressieren.

    Ein integer ist ein integer und bleicht ein integer egal auf welcher Plattform er ausgeführt wird. Der Befehlssatz für die CPU ist halt ein wenig anders und die Bus Breite liegt bei 64bits pro sekunde stadt 32bits.

    Die Vorteile sind mehr Performance da die CPU die Daten schneller abarbeiten kann und weil mehr Speicher Adresseiert werden kann.

    Und wen der CPU Groß genug ist (z.B. MainFrames^^) dann kann man auf jedenfall Exabyte in dass RAM-System laden, wen man einige Tausend Server Virtualisiert und auf diesen Exchange, Sparepoint und Co läuft dann ist der RAM schon ganz schnell auf exorbitant hohen levels.

    LG, Herbrich
    64bit bzw 32bit gibt ja die Datenbusbreite an, und heut zutage gibt es fast nur noch 64bit Rechner. Ja, man kann durch Optimierungen den RAM Verbrauch senken, kommt halt drauf an wie gut deine Software den GC bemüht bspw.
    »There's no need to "teach" atheism. It's the natural result of education without indoctrination.« — Ricky Gervais
    Hallo,

    Ich nehme mal an du meinst nicht den Global Catalog von Active Directory mit GC sondern die Gabrage Collection?? ;)

    Die muss unter .NET eig in den seltensten fällen durch eigenen Coode Manuell angepasst werden. So ein fall ist z.B. wenn man Nativen Coode nachladen möchte, oder auch bei TCP-Servern, dar sollte man einen Client von RAM Löschen wen er nicht mehr Verbunden ist.

    In Algemeinen steigt der RAM Verbrauch auch Dadurch dass meistens sachen geladen bleiben in RAM die eig nicht mehr gebraucht werden. So kann man nach den laden einer Datei in eine Variable under halt eben auch in einen Memory Stream einfach die variable wieder neu Inizialisieren mit Nothing / Null wen die Global in einer Klasse Declariert ist.

    Und einen Memorystream sollte mal wie jeden anderen nicht mehr benötigten Stream schlißen. (Gilt nicht für Network Streams nach beenden von Read / Write Actionn, dieser sollte bei einen Dissconnect geschlossen werden, undzwar auch alle Stream Writer und oder Stream Reader).

    LG, Herbrich
    Hallo,

    Ja, der GC läuft automatisch in Hintergrund ab, nur in bestimmten fällen ist eine Intervention durch den Programmierer nötig. Aber die Kernfrage sei damit doch beandwortet. 64bit verbraucht nicht mehr RAM als 32bit. Die Größe der Pointer ist jetzt nicht so nenenswert hoch.

    LG, Herbrich
    dass sie mehr Speicher addressieren können

    Bezüglich dessen würde ich einfach sagen "weil's geht".
    Ich vermute mal, dass bei .Net der Garbage Collector es einfach nicht nötig findet, alle paar Sekunden einzugreifen, wenn eh mehr RAM da ist.
    "Luckily luh... luckily it wasn't poi-"
    -- Brady in Wonderland, 23. Februar 2015, 1:56
    Desktop Pinner | ApplicationSettings | OnUtils
    Ahso danke erstmal für die vielen guten Antworten. Meine Frage war jetzt auch etwas "ausserhalb" von selber kompilieren. Z.B ich habe ein Video in x86 Firefox Version 32 offen es hat 255 MB Ram benutzt im HTML5 Player. Das gleiche Video in x64 Palemoon Version 24 hat 560MB benutzt auch im HTML5 Player. Wieso ist es etwas mehr als das doppelte ? Kann man sowas nicht reduzieren in einer x64 Anwendung ?
    Hallo,

    Weil mehr Daten gleichzeitig an den CPU gehen, und das erfordert auch größere Pointer, ein 32bit Pointer muss weniger lange adressen speichern als ein 64bit Pointer. Wurde doch schon gesagt.

    LG, Herbrich
    Wo ist denn das Problem, wenn viel Speicher verwendet wird?
    Ungenutzter Speicher ist toter Speicher.

    Aus diesem Grund nutzen viele Programme so viel Speicher wie sie können.
    Solange genug Speicher da ist, spricht auch nichts dagegen, den zu verwenden.
    Allerdings:
    Auch bei x64 kann ein einzelner Prozess nicht mehr als 2GB verwenden, wenn nicht IMAGE_FILE_LARGE_ADDRESS_AWARE gesetzt ist.
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --