32bit oder 64bit ?

Für Fragen von Einsteigern und Programmieranfängern...
Warf
Beiträge: 1908
Registriert: Di 23. Sep 2014, 17:46
OS, Lazarus, FPC: Win10 | Linux
CPU-Target: x86_64

Re: 32bit oder 64bit ?

Beitrag von Warf »

itjump hat geschrieben:Ja, das was du da gemacht hast, den Speicher zu reservieren ist möglich, aber ich rede über Programme, die auch was Sinnvolles machen und nicht über Viren :D
Übrigens, kannst du auch mit einer Endlosschleife in Java Script Firefox dazu bringen immer mehr RAM zu verbrauchen und dadurch den PC abstürzen lassen. Zumindest ging das unter Windows 7 vor einem Jahr noch.


Es kommt immer auf die Art der Anwendung an. Eine Steueranwendung für deinen PC wird wohl kaum viel RAM verbrauchen. Wenn du aber z.B. viel mit Stringparsing von großen Dateien arbeitest wie z.B. eine IDE/Interpreter/etc. oder viele Threads offen hast wie ein Server, oder große Datenmengen Managed wie ein Datenbanksystem, da kannst du schnell mal in den GB Bereich kommen. Klar kann man oftmals auf Speicherplatz optimieren, indem man Daten nur Partiell von der Platte liest, allerdings geht das natürlich auf die Laufzeit. Und 4 GB extra RAM sind billiger als mehrere SSD's zu nem RAID geschaltet um Laufzeitoptimierung vorzunehmen. Wenn man einen Rechner mit genug RAM hat (z.b. ein Server mit 32 GB RAM), kann sich eine Software (z.B. ein DBS) problemlos genug nehmen, um dafür Anfragen schneller zu verarbeiten.

Aber auch auf dem Desktop gibt es solche Programme, ein ganz einfaches Beispiel ist Visual Studio von Microsoft, das lädt sehr viele Plugins und Scriptinterpreter sowie viele Grafiken Bibliotheken, etc. und schafft es damit Problemlos in den GB Bereich (vor allem wenn man viele Dateien offen hat und viele Plugins aktiviert hat). Google Chrome ist auch irgendwo im 100+MB Bereich wenn man ein paar Tabs offen hat.
Wenn ich in Final Cut ein 4k video Schneide reichen meine 8GB Ram die ich im Rechner habe schon nicht mehr aus.

Ich schreibe aktuell eine kleine IDE und ich kann dir sagen wie einfach es ist 1 GB RAM zu verbrauchen, der User muss nur STRG+O drücken und eine 1 GB große Datei wählen und schon ist so viel RAM belegt.

Also die Aussage das Sinnvolle Programme nicht so viel Speicher brauchen ist kompletter Unsinn

compmgmt
Beiträge: 351
Registriert: Mi 25. Nov 2015, 17:06
OS, Lazarus, FPC: Win 10 Pro | Lazarus 1.8.2 | FPC 3.0.4
CPU-Target: i386 + x86_64
Wohnort: in der Nähe von Stuttgart
Kontaktdaten:

Re: 32bit oder 64bit ?

Beitrag von compmgmt »

Warf hat geschrieben:Also die Aussage das Sinnvolle Programme nicht so viel Speicher brauchen ist kompletter Unsinn

Er meinte damit nicht dass sinnvolle Programme wenig RAM brauchen, sondern dass mein Beispiel eine Art Virus war der einfach nur RAM reserviert hat und nichts damit gemacht hat.
Zuletzt geändert von compmgmt am Fr 21. Okt 2016, 17:37, insgesamt 1-mal geändert.

Code: Alles auswählen

InitiateSystemShutdownExA(nil, nil, 0, true, false, $0005000F);
Have fun with this snippet ;)

marcov
Beiträge: 1100
Registriert: Di 5. Aug 2008, 09:37
OS, Lazarus, FPC: Windows ,Linux,FreeBSD,Dos (L trunk FPC trunk)
CPU-Target: 32/64,PPC(+64), ARM
Wohnort: Eindhoven (Niederlande)

Re: 32bit oder 64bit ?

Beitrag von marcov »

Warf hat geschrieben:
Christian hat geschrieben:
Das ist kein Problem, lade dir die 32Bit Version von Lazarus herunter, die Binary wird überall laufen, mit 64Bit Kompilaten laufen deine Anwendungen halt nicht auf 32Bit, umgekehrt ein 32Bit Kompilat aber auf eine 64Bit System unter Vernachlässigbaren Leistungsverlust.


umgedreht. 64bit ist langsamer.
Du hast (nur) zugriff auf maximal 3,5Gb Speicher

Das kann man so nicht Pauschalisieren, auf 64 Bit Datentypen sind 64 Bit Programme deutlich schneller als 32 Bit Programme und umgekehrt.


Aber wie viel Kode gibst wo auch in 32-bit modus 64-bit Datatypen genutzt werden in etwas zeit-sensitiver Kontext? Kann nur AES bedenken, und vielleicht ein paar Hashmaps mit 64-bits keys.

Allerdings gilt im allgemeinen 32 Bit ist nur halb so viel wie 64 Bit, das heißt allein von der Datenmenge die durch den Bus gejagt wird sind 64 Bit Typen langsamer in der Verwendung. Und da 32 Bit Programme viele 32 Bit Typen verwenden (Zeiger, Handles, etc.) und 64 Bit Programme die selben typen als 64 Bit hat sind 64 Bit Programme augenscheinlich langsamer. Würde man allerdings bei einem 32 Bit Programm ausschließlich 64 Bit Typen verwenden wäre 64 Bit schneller.


Typisch gehen nur Pointer nach 64-bit.

Aber es gibt auch eine Menge unterschieden neben Daten Größe:

  1. (+) 64-bit hat mehr integer Registers. (R8..R15)
  2. (+) 64-bit hat mehr SSE Registers. (16 SSE2-4 or 32 AVX-AVX2)
  3. (+ nur auf *nix) schnellere und einfachere Position Independent Code
  4. (-) Auf windows ist x87 deprecated auf 64-bit, und wird SSE2 fuer FPU genutzt. Das kann schneller sein mit einfache Instruktionen, aber complex (sin/cos/tan usw) sind typisch langsamer

malabarista
Beiträge: 321
Registriert: Sa 11. Jun 2016, 12:16
OS, Lazarus, FPC: Linux Mint 18.1 L1.6.2-1 FPC 3.0.0
CPU-Target: 64Bit
Wohnort: Konstanz

Re: 32bit oder 64bit ?

Beitrag von malabarista »

Dankeschön für die Antworten.

Ich habe diese Frage vorausschauend gestellt, weil ich demnächst auf 64bit wechseln werde.
Ich werde dann wie vorgeschlagen für Windows die 32bit- und 64bit-Version installieren und für Linux die 64bit-Version.

Warf
Beiträge: 1908
Registriert: Di 23. Sep 2014, 17:46
OS, Lazarus, FPC: Win10 | Linux
CPU-Target: x86_64

Re: 32bit oder 64bit ?

Beitrag von Warf »

marcov hat geschrieben:Aber wie viel Kode gibst wo auch in 32-bit modus 64-bit Datatypen genutzt werden in etwas zeit-sensitiver Kontext? Kann nur AES bedenken, und vielleicht ein paar Hashmaps mit 64-bits keys.


Allein der Typ Double wird sehr häufig verwendet

Christian
Beiträge: 6079
Registriert: Do 21. Sep 2006, 07:51
OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
CPU-Target: AVR,ARM,x86(-64)
Wohnort: Dessau
Kontaktdaten:

Re: 32bit oder 64bit ?

Beitrag von Christian »

Im Projektverwaltungsteil vom Promet mach ich 10.000den Aufgaben über aktuell ~100 Projekte quasi Dispo komplett im Ram dort komm ich nie über 300Mb.
Strategiespiele würden mir noch einfallen, wo man abertausende Einheiten berechnet. Und Bildverarbeitung. Alles Sachen die man in 90% der Fälle nicht tut.
Als generische Empfehlung kann man glaub ich durchaus sagen das 32bit unter Windows für die meissten Anwendungsfälle völlig ausreichend ist.
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

Mathias
Beiträge: 6160
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: 32bit oder 64bit ?

Beitrag von Mathias »

Ich mag mich noch erinnern, als man von 16Bit auf 32Bit umgestiegen ist.
Da konnte man, obwohl ein 16Bit OS lief (DOS oderWin3.1), konnte man 32Bit-Register verwenden, um schneller zu Rechnen.
Die Speicherverwaltung, ist ein ganz anderes Thema.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Christian
Beiträge: 6079
Registriert: Do 21. Sep 2006, 07:51
OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
CPU-Target: AVR,ARM,x86(-64)
Wohnort: Dessau
Kontaktdaten:

Re: 32bit oder 64bit ?

Beitrag von Christian »

Ja das ist aber nicht vergleichbar. 32bit zahlen zum Rechnen waren auch damals schon die mehrzahl. Mit 64bit Zahlen rechnet man sehr selten. Deshalb sind 64bit Programme ja auch in der Ausführung langsamer als 32bit. Dazu brauchen sie mehr Speicher. Ausserdem kann man mit 16Bit Programmen nur 64kb Speicher ohne Segmentierung ansprechen. Da ist der Druck das man auf 32bit umschwenken wollte schon etwas größer als wenn man schon 3,5Gb ansprechen kann.
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

itjump
Beiträge: 179
Registriert: Do 13. Okt 2016, 18:35
Wohnort: Winnenden

Re: 32bit oder 64bit ?

Beitrag von itjump »

Christian hat geschrieben:Ja das ist aber nicht vergleichbar. 32bit zahlen zum Rechnen waren auch damals schon die mehrzahl. Mit 64bit Zahlen rechnet man sehr selten. Deshalb sind 64bit Programme ja auch in der Ausführung langsamer als 32bit. Dazu brauchen sie mehr Speicher. Ausserdem kann man mit 16Bit Programmen nur 64kb Speicher ohne Segmentierung ansprechen. Da ist der Druck das man auf 32bit umschwenken wollte schon etwas größer als wenn man schon 3,5Gb ansprechen kann.


Ja, und wer braucht für sein Programm schon 17179869184Gb RAM :D. OK, das ist sehr Theoretisch, weil es kein Betriebssystem gibt, das so viel RAM überhaupt verarbeiten würde.

Christian
Beiträge: 6079
Registriert: Do 21. Sep 2006, 07:51
OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
CPU-Target: AVR,ARM,x86(-64)
Wohnort: Dessau
Kontaktdaten:

Re: 32bit oder 64bit ?

Beitrag von Christian »

Ja, und wer braucht für sein Programm schon 17179869184Gb RAM :D. OK, das ist sehr Theoretisch, weil es kein Betriebssystem gibt, das so viel RAM überhaupt verarbeiten würde.

Genau das wollte ich erklären.
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

Mathias
Beiträge: 6160
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: 32bit oder 64bit ?

Beitrag von Mathias »

Mit 64bit Zahlen rechnet man sehr selten.

Wird nicht sehr viel mit Double gerechnet, welcher 64Bit breit ist ?

Ausserdem kann man mit 16Bit Programmen nur 64kb Speicher ohne Segmentierung ansprechen. Da ist der Druck das man auf 32bit umschwenken wollte schon etwas größer als wenn man schon 3,5Gb ansprechen kann.
Da ist man sehr viel an die Grenzen gestossen. Als dazumal Delphi 2 erschienen ist, welches 32Bit unterstütze, war es eine richtige Erleichterung.

Auch Konstanten war auf 64KB begrentzt, somit hatte ich mal einen Zeichensatz als Procedure deklariert, um das Problem zu umgehen.

Code: Alles auswählen

procedure CharTab; assembler;
asm                         
 db    12,  34,  56,   78,  90
.....
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

itjump
Beiträge: 179
Registriert: Do 13. Okt 2016, 18:35
Wohnort: Winnenden

Re: 32bit oder 64bit ?

Beitrag von itjump »

Mathias hat geschrieben:
Mit 64bit Zahlen rechnet man sehr selten.

Wird nicht sehr viel mit Double gerechnet, welcher 64Bit breit ist ?

Ausserdem kann man mit 16Bit Programmen nur 64kb Speicher ohne Segmentierung ansprechen. Da ist der Druck das man auf 32bit umschwenken wollte schon etwas größer als wenn man schon 3,5Gb ansprechen kann.
Da ist man sehr viel an die Grenzen gestossen. Als dazumal Delphi 2 erschienen ist, welches 32Bit unterstütze, war es eine richtige Erleichterung.

Auch Konstanten war auf 64KB begrentzt, somit hatte ich mal einen Zeichensatz als Procedure deklariert, um das Problem zu umgehen.

Code: Alles auswählen

procedure CharTab; assembler;
asm                         
 db    12,  34,  56,   78,  90
.....

Das ist ja heute noch bei Assembler gang und gebe. Da muss man mehrere Register nutzen um große Werte zu Verarbeiten, weshalb man sich eher auf das wesentliche beschränkt.

Antworten