AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Delphi und 64-Bit Programme

Ein Thema von Harry Stahl · begonnen am 25. Mär 2022 · letzter Beitrag vom 30. Mär 2022
Antwort Antwort
Seite 1 von 2  1 2   
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.277 Beiträge
 
Delphi 10.4 Sydney
 
#1

AW: Delphi und 64-Bit Programme

  Alt 28. Mär 2022, 23:49
Hallo,
und ich bleibe dabei.
Ein TStringList sollte unter 64Bit mehr Daten verwalten können als unter 32Bit.

Auch Embarcadero bringt ja immer das "alter Code läuft wie bisher".
Ja, aber mit 64Bit muss auch der komplette 64Bit-Speicherbereich ausgenutzt werden!

Punkt!!!

Und jetzt macht mich rot
Heiko
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.962 Beiträge
 
Delphi 12 Athens
 
#2

AW: Delphi und 64-Bit Programme

  Alt 29. Mär 2022, 00:13
Ein TStringList sollte unter 64Bit mehr Daten verwalten können als unter 32Bit.
Dann würde mich interessieren wie du dir das konkret vorstellst? Sollen Strings deshalb eine andere interne Struktur bekommen?
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
Benutzerbild von Sinspin
Sinspin

Registriert seit: 15. Sep 2008
Ort: Dubai
717 Beiträge
 
Delphi 10.3 Rio
 
#3

AW: Delphi und 64-Bit Programme

  Alt 29. Mär 2022, 08:58
Ein TStringList sollte unter 64Bit mehr Daten verwalten können als unter 32Bit.
Dann würde mich interessieren wie du dir das konkret vorstellst? Sollen Strings deshalb eine andere interne Struktur bekommen?
Ja, natürlich! Wen juckt das überhaupt wie der intern aufgebaut ist? Früher war es ein Byte am Anfang und maximal 255 Bytes dahinter.
Jetzt ist es was? ...und in Zukunft? Wollen wir ehwig gestrig bleiben? Rostig? Alt?

Der Typ String ist noch immer ein reserviertes Wort im Quelltext, also Compilermagic.
Dass man die realen String Typen vieleicht besser um eine 64Bit Variante erweitert, sollte klar sein.
Aber String ist jetzt schon dynamisch das was man eingestellt hat. Warum dann unter 64Bit nicht auch 64Bit tauglich?

Dass man beim übersetzen in 64Bit den Kopf angeschaltet lassen muss sollte jedem klar sein. Bestimmte Sachen, wie einen String in eine Binärdatei schreiben oder daraus lesen ohne eine Wrapper zu verwenden der sich um 32Bit / 64Bit unterschiede kümmert ist dann halt als Dummheit zu verbuchen.
Stefan
Nur die Besten sterben jung
A constant is a constant until it change.
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe
Online

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.651 Beiträge
 
Delphi 12 Athens
 
#4

AW: Delphi und 64-Bit Programme

  Alt 29. Mär 2022, 10:22
Wen juckt das überhaupt wie der intern aufgebaut ist?
Da ist in der Tat was dran. Rein von der Speicherstruktur sehe ich da kein wirkliches Hindernis. Allerdings gibt es etliche Stellen im Source, bei denen implizit eine String-Länge und auch die Indizierung mit 32-Bit angenommen wird. Das ist ein nicht zu unterschätzender Aufwand, unweigerlich begleitet von potentiell signifikanten Fehlerquellen.

Übrigens ist WideString auch keine Alternative (eigentlich sogar ein Rückschritt), da das interne Datenformat auch hier 4 Bytes für die Länge reserviert - dummerweise diesmal in Bytes, so dass ein WideString nur halb so lang werden darf wie ein string.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Benutzerbild von TigerLilly
TigerLilly

Registriert seit: 24. Mai 2017
Ort: Wien, Österreich
1.241 Beiträge
 
Delphi 12 Athens
 
#5

AW: Delphi und 64-Bit Programme

  Alt 29. Mär 2022, 16:35
Hmm. Egal, ob ich Code für 64 Bit oder 32 Bit kompiliere, ich gehe davon aus, dass der Code - nur für sich genommen - funktioniert. Schnittstellen, Dateien etc sind außen vor, das ist bei UniCode ja auch so. Dass ich mir beim Compilieren für 64 Bit überlegen muss, ob mein Code per se funktioniert, ist nicht so toll. Woher weiß ich denn, was in der RTL nicht funktionieren würde?
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe
Online

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.651 Beiträge
 
Delphi 12 Athens
 
#6

AW: Delphi und 64-Bit Programme

  Alt 29. Mär 2022, 16:58
Woher weiß ich denn, was in der RTL nicht funktionieren würde?
Wenn du dich hierauf beziehst:
Das ist ein nicht zu unterschätzender Aufwand, unweigerlich begleitet von potentiell signifikanten Fehlerquellen.
dann betrifft dieser Aufwand natürlich Embarcadero, sollten sie irgendwann mal 64-Bit-Strings unterstützen wollen. Für den Anwender (also uns) sollte das weitestgehend transparent sein.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
jziersch

Registriert seit: 9. Okt 2003
Ort: München
258 Beiträge
 
Delphi 10.4 Sydney
 
#7

AW: Delphi und 64-Bit Programme

  Alt 30. Mär 2022, 08:24
Braucht man wirklich Strings mit Int64 Länge? Was soll das bringen.

Für grosse Daten gibts ja MemoryStreams - die haben auch nicht das Problem, dass zwischen irgendwelchen codepages hin und her gewandelt wird. Viele moderne Speicherformate verwenden nur 8 Bit, also RTF, XML, HTML ... da strings mit seinen WideChar zeichen auch nicht aussreicht alle Zeichen zu codieren. Die Speicherung solcher Daten in einen "string" fürhrt dann regelmässig zu 00nn00nn00nn00nn.

Dass ein Integer 32 bit hat, auch unter 64 bit war meiner Ansicht nach die genau richtige Entscheidung, da der Entwickler so explizit die Möglichkeit hat zu entscheiden, ob der große Typ erforderlich ist, oder nicht und "alte" Programme 1:1 laufen.

Wichtig ist es aber IntPtr zu verwenden für alle Integer die auch Speicheradressen sein können- typischerweise für die Übergabe an SendMessage u.ä.
WPCubed GmbH
Komponenten für Delphi:
WPTools, wPDF, WPViewPDF
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe
Online

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.651 Beiträge
 
Delphi 12 Athens
 
#8

AW: Delphi und 64-Bit Programme

  Alt 29. Mär 2022, 08:46
Ja, aber mit 64Bit muss auch der komplette 64Bit-Speicherbereich ausgenutzt werden!
Das fände ich jetzt aber sehr unfair gegenüber den anderen Anwendungen.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.222 Beiträge
 
Delphi 10.4 Sydney
 
#9

AW: Delphi und 64-Bit Programme

  Alt 29. Mär 2022, 09:40
Ja, aber mit 64Bit muss auch der komplette 64Bit-Speicherbereich ausgenutzt werden!
Das fände ich jetzt aber sehr unfair gegenüber den anderen Anwendungen.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Benutzerbild von Stevie
Stevie

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

AW: Delphi und 64-Bit Programme

  Alt 30. Mär 2022, 14:32
Wer ne 32GB Datei in eine TStringList läd, hat ganz andere Probleme als den Fakt, dass es bei mehr als (2^31)-1 Zeilen kracht.

Ein TStringList sollte unter 64Bit mehr Daten verwalten können als unter 32Bit.
Tut sie auch - eine 32bit Anwendung kann ohne large address aware 2GB Speicher verwalten, mit 3GB (32bit OS) bzw 4GB (64bit OS).

Wer sich mal die Mühe gemacht hat, in den Code von TStringList zu schauen, der wird gesehen haben, dass pro Eintrag 8 bzw 16 byte benötigt werden (TStringItemList).
D.h. dass selbst beim Eintragen von Leerstrings in eine TStringList bei einer non LAA Anwendung gerade mal Speicher für ca 268mio Einträge zur Verfügung steht.
Anders herum betrachtet heißt das, dass eine TStringList mit einer Capacity von MaxInt als 64bit Anwendung schon allein ca 32GB verbrauchen würde (MaxInt*16)! Und da sind noch gar keine Strings drin.

Mal kurz durchgerechnet, welche Mindestzeilenlänge die Datei haben müsste, wenn sie in UTF8 kodiert wäre und nur ASCII Chars enthalten würde - das wären 32GB Zeichen. Eine TStringList hat maximal Platz für 2^31-1 Einträge.
Somit müssten die Zeilen im Durchschnitt 16 Zeichen lang sein, das kommt mir doch schon sehr kurz vor für eine Datei, die man mit einer TStringList verarbeiten möchte.

Ich stand kürzlich selbst vor der Entscheidung, ob ich bei den Spring Collections auf NativeInt für Index umstellen soll oder nicht, aber da kommt man dann doch auf ganz andere Probleme, wie den Fakt, dass ein open Array auch unter 64bit seinen versteckten High Parameter nur als Int32 übergibt.

P.S. Ist auch schon eine ganze Weile lang "bekannt" (vermutlich inzwischen schon wieder vergessen worden, ist halt nicht einfach bei zig Tausend Issues in nem JIRA den Überblick zu behalten, woll)
https://quality.embarcadero.com/browse/RSP-12438
Stefan
“Simplicity, carried to the extreme, becomes elegance.” Jon Franklin

Delphi Sorcery - DSharp - Spring4D - TestInsight

Geändert von Stevie (30. Mär 2022 um 17:41 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2   

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 12:16 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-2025 by Thomas Breitkreuz