AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

EIntOverflow bei LongWord, nicht aber bei Word

Ein Thema von Der schöne Günther · begonnen am 28. Mai 2018 · letzter Beitrag vom 29. Mai 2018
Antwort Antwort
Benutzerbild von Zacherl
Zacherl

Registriert seit: 3. Sep 2004
4.629 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#1

AW: EIntOverflow bei LongWord, nicht aber bei Word

  Alt 28. Mai 2018, 19:40
Wie verhält sich das auf Win64?
Ohne es jetzt verifiziert zu haben, wird dort vermutlich weiterhin mit den 32-Bit Registern gerechnet, solange man keine größeren Datentypen verwendet. X86-64 kann in den meisten Fällen ja beides bzw. benötigt sogar explizit ein 64-Bit promotion prefix (REX.W), um die Instructions von der standardmäßig 32-Bit Breite auf 64-Bit umzustellen.

Wie verhält sich das, sollte ich (Gott bewahre!) etwas auf iOS oder Android kompilieren wollen? Ist das immer noch alles 32 Bit?
iOS ist definitiv tatsächlich immer 64-Bit seit einiger Zeit. Bei Android kann ich es dir nicht sagen .. wird vermutlich nicht einheitlich sein.
Projekte:
- GitHub (Profil, zyantific)
- zYan Disassembler Engine ( Zydis Online, Zydis GitHub)
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.190 Beiträge
 
Delphi 10 Seattle Enterprise
 
#2

AW: EIntOverflow bei LongWord, nicht aber bei Word

  Alt 28. Mai 2018, 19:44
Und sich wahrscheinlich alle paar Versionen ändern. Ab sofort traue ich keiner Addition und Subtraktion mehr und nehme für alles die größten Datentypen die ich finden kann.

Nicht wirklich, aber so in etwa.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.313 Beiträge
 
Delphi 12 Athens
 
#3

AW: EIntOverflow bei LongWord, nicht aber bei Word

  Alt 29. Mai 2018, 11:29
Nja, per se kann eine x86-CPU mit 16 und 8 Bit-Werten rechnen, aber wie bereits erkannt, castet Delphi oftmals schon vorher und die Überlaufprüfung spricht nicht an, wenn für die mathematischen Operationen dann die 32-Bit-Befehle verwendet werden.



Es gibt von Android noch 32 Bit OS, aber so wie es aussieht wird seit einiger Zeit von den meisten "größeren" Herstellerung scheinbar nur noch 64 Bit verwendet.
Der Vorteil eines OS mit nur noch einem Layer wäre ja eine kleinere Codebasis und dass Programme von der Bittigkeit dann überall laufen

Also 64 Bit-Apps welche in reinen 32 OS bekanntlich nicht laufen. Bzw. Es ist dann nicht nötig, dass dann unnötig viele Varianten eines Programms in einer APK liegen, wenn man überall die beste Performance haben will.

32 Bit ARM
64 Bit ARM
32 Bit Intel (x86)
64 Bit Intel (x86)

vv

64 Bit ARM
64 Bit Intel (x86)

In neueren Intel-Androids werden ja nun auch ARM-only-Apps (armeabi) ausgeführt.
Gut, das ist nicht sonderlich schnell, aber für kleine Apps, ohne große CPU-Auslastung, spart das nochmal Speicherplatz.



Uns interessiert es ja noch nicht, da Delphi aktuell eh nur 32 Bit für Android anbietet.
Und Intel von Delphi noch garnicht unterstützt wird. Da ist nur ein blöder ARM-Dummy drin, welcher eine Fehlermeldung anzeigt, mit dem Ergebnis, dass Delphi-Apps standardmäßig überall starten, aber selbst wenn das Android/Intel ARM emulieren kann, dort dennoch nichts läuft, weil der Emulator nicht anspringt, so lange der Dummy in der API rumgammelt. Und Dank des ARM-Dummy listet der PlayStore diese Apps für Intel-Geräte auf, obwohl sie dann doch nicht ausgeführt werden können.
Ein Therapeut entspricht 1024 Gigapeut.

Geändert von himitsu (29. Mai 2018 um 12:57 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
3.691 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: EIntOverflow bei LongWord, nicht aber bei Word

  Alt 29. Mai 2018, 12:13
@himitsu, ist das oft vorkommende "x68" ein Tippfehler für "x86" oder habe ich das falsch verstanden und kenne es einfach noch nicht?
Gruß vom KodeZwerg
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.313 Beiträge
 
Delphi 12 Athens
 
#5

AW: EIntOverflow bei LongWord, nicht aber bei Word

  Alt 29. Mai 2018, 12:52
jupp
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
Benutzerbild von Stevie
Stevie

Registriert seit: 12. Aug 2003
Ort: Soest
4.039 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#6

AW: EIntOverflow bei LongWord, nicht aber bei Word

  Alt 29. Mai 2018, 13:13
Übrigens: LongWord ist nicht auf allen Plattformen 32bit - siehe http://docwiki.embarcadero.com/Libra...ystem.LongWord

Das ist doch bestimmt seit 20 Jahren so. Den Bug behebt sicher keiner mehr.

Eine Warnung wäre bei so etwas vielleicht auch angebracht, aber wir wissen ja:
Wenn Delphi (der Delphi-Compiler) alles testen würde, was eventuell schief gehen könnte, dann wären die Übersetzungszeiten länger.
Genau, wir alle wollen ja schließlich schnelle Buildzeiten, die dann potenziell fehlerhaften und langsame(re)n Code erzeugen...
Stefan
“Simplicity, carried to the extreme, becomes elegance.” Jon Franklin

Delphi Sorcery - DSharp - Spring4D - TestInsight

Geändert von Stevie (29. Mai 2018 um 13:17 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.313 Beiträge
 
Delphi 12 Athens
 
#7

AW: EIntOverflow bei LongWord, nicht aber bei Word

  Alt 29. Mai 2018, 13:20
Das wird eh immer langser, von Version zu Version ... das bissl fällt dann auch nicht mehr auf, wenn es noch rein käme.


Es hab auch mehrere Versionen lang einen Bug, wo UInt64/LargeWord vei einigen Berechnungen als Int64 behandelt wurde.
Bissl was wird doch irgendwann repariert.


In 32 Bit ist Int64 und UInt64 emuliert und wird "langsam" über zwei Integer/Cardinal manuell berechnet.
Darum sträubt sich Delphi auch, Integer dahin automatisch etwas zu erweitern.
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.190 Beiträge
 
Delphi 10 Seattle Enterprise
 
#8

AW: EIntOverflow bei LongWord, nicht aber bei Word

  Alt 29. Mai 2018, 13:24
Genau, wir alle wollen ja schließlich schnelle Buildzeiten, die dann potenziell fehlerhaften und langsame(re)n Code erzeugen...
Richtig, denn ich steche Mitbewerber mit der geringeren Time-to-Market aus


Ernsthaft: Was lernen wir nun aus der Geschichte?

Muss ich es jetzt für alle Datentypen die es grade gibt durchprobieren und mir dann einen Zettel an den Monitor kleben "Vorsicht, bei Rechnen mit folgenden Typen..."


Es ist doch sicher irgendwo dokumentiert "Word mit Word verrechnen ergibt DWord", "DWord mit DWord verrechnen ergibt DWord", ...
  Mit Zitat antworten Zitat
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
3.691 Beiträge
 
Delphi 11 Alexandria
 
#9

AW: EIntOverflow bei LongWord, nicht aber bei Word

  Alt 29. Mai 2018, 13:43
"DWord mit DWord verrechnen ergibt DWord", ...
Nicht ganz, DWORD mit DWORD kommt ein QWORD / DINT raus. (-9223372036854775808 bis 9223372036854775807)
Manche nennen es auch QUADWORD.

Bestimmt wird es in naher Zukunft auf OWORD/OCTOWORD o.ä. erweitert (128bit)
Gruß vom KodeZwerg

Geändert von KodeZwerg (29. Mai 2018 um 13:52 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:58 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz