AGB  ·  Datenschutz  ·  Impressum  







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

Arraygrösse und Stack Overflow

Ein Thema von johndoe049 · begonnen am 21. Feb 2024 · letzter Beitrag vom 21. Feb 2024
Antwort Antwort
Seite 2 von 2     12   
Benutzerbild von Uwe Raabe
Uwe Raabe

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

AW: Arraygrösse und Stack Overflow

  Alt 21. Feb 2024, 15:02
Bevor wir was optimieren, müssen wir das erst mal möglichst nahe umbauen.
Ehm,
Delphi-Quellcode:

TMyArray = array [0..1000] of array [0..10] of array [0..10000] of integer;
und
Delphi-Quellcode:

TMyArray = array[0..1000, 0..10, 0..10000] of integer;
sind syntaktisch dasselbe. Das hat nichts mit optimieren zu tun.

Zitat:
A multidimensional array is an array of arrays. For example:
Delphi-Quellcode:

type TMatrix = array[1..10] of array[1..50] of Real;
is equivalent to:
Delphi-Quellcode:

type TMatrix = array[1..10, 1..50] of Real;
Whichever way TMatrix is declared, it represents an array of 500 real values.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
johndoe049

Registriert seit: 22. Okt 2006
169 Beiträge
 
#12

AW: Arraygrösse und Stack Overflow

  Alt 21. Feb 2024, 15:18
Bevor wir was optimieren, müssen wir das erst mal möglichst nahe umbauen.
Ehm,
Delphi-Quellcode:

TMyArray = array [0..1000] of array [0..10] of array [0..10000] of integer;
und
Delphi-Quellcode:

TMyArray = array[0..1000, 0..10, 0..10000] of integer;
sind syntaktisch dasselbe. Das hat nichts mit optimieren zu tun.

Zitat:
A multidimensional array is an array of arrays. For example:
Delphi-Quellcode:

type TMatrix = array[1..10] of array[1..50] of Real;
is equivalent to:
Delphi-Quellcode:

type TMatrix = array[1..10, 1..50] of Real;
Whichever way TMatrix is declared, it represents an array of 500 real values.
Änderungen und verbesserungen am Syntax machen wir erst, wenn wir das komplett geprüft und verstanden haben.

Wir haben dieses kleine Array bisher im Sourcecode an verschiedenen Funktionen gefunden. Erstmal rausfinden, was der überhaupt programmiert hat.

Es gibt auch noch Funktionen, die etwas 2000 Zeilen haben. Dokumentation gibt es nicht. Nur das Free Pascal Projekt, das wir auf Delphi umsetzen sollen.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Arraygrösse und Stack Overflow

  Alt 21. Feb 2024, 17:19
Jupp, unterschiedliche Syntax, aber technisch gesehn, sind die Beiden identisch.
Delphi-Quellcode:
xxx: array[0..9] of array[0..9] of Byte;
xxx: array[0..9, 0..9] of Byte;
Rein von den Daten her ist es sogar gleich/kompatibl zu
xxx: array[0..99] of Byte;

ABER, leider ist teilweise das Letzte auch für den Compiler das Selbe.
https://quality.embarcadero.com/browse/RSP-42256


Bei statischen Arrays liegen die Daten der Felder immer hintereinander (zusammenhängend).
Bei dynamischen Arrays stehen nur die Referenzen hintereinander, aber die einzelnen Daten liegen verteilt im Arbeitsspeicher.

Die Daten eines array[..] of Xyz; sind direkt im Typ gespeichert und beim array of Xyz; noch mit einem Pointer dazwischen.
@Arr[0] zeigt bei dynamisch und statisch auf die Daten.
@Arr kommt beim Statischen auf's Gleiche raus, aber beim Dynamischen zeigt es auf den "internen" Array-Pointer.

Und bei array of array of ... das Gleiche,
array[..] of array[..] of ... liegen auch die SubArrays hintereinander,
array[..] of array of ... bzw array of array of ... die SubArrays natülich verteilt liegen.

Kanst das mit Record und Object vergleichen. (so gesehn ist ein Object ein Record mit einem interen Pointer)
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.

Geändert von himitsu (22. Feb 2024 um 17:11 Uhr) Grund: upsi
  Mit Zitat antworten Zitat
Kas Ob.

Registriert seit: 3. Sep 2023
347 Beiträge
 
#14

AW: Arraygrösse und Stack Overflow

  Alt 21. Feb 2024, 18:45
I would use something like this
Code:
type
  TMatri = array of array of Integer;
  TMatrixArr = array of TMatri;

var
  M: TMatrixArr;
  i, j, k: Integer;

const
  DIM1 = 3;
  DIM2 = 4;
  DIM3 = 5;

begin
  SetLength(M, DIM1);
  for I := Low(M) to High(M) do      // or // for i := 0 to DIM1-1 do
  begin
    SetLength(M[i], DIM2, DIM3);
    for j := 0 to Pred(DIM2) do      // or // for j := 0 to DIM2-1 do
      for k := 0 to Pred(DIM3) do    // or // for k := 0 to DIM3-1 do
        M[i][j, k] := Abs(k - j);
  end;
I think accessing such nested data with M[i][j, k] easier to read and write.
2024-02-21-19_44_05-project5-delphi-xe8-project5.dproj-%5Bstopped%5D-%5Bbuilt%5D.png
Kas
  Mit Zitat antworten Zitat
Alt 22. Feb 2024, 16:45     Erstellt von Benmik
Dieser Beitrag wurde von TBx gelöscht. - Grund: Hat sich erledigt
Alt 22. Feb 2024, 17:11     Erstellt von himitsu
Dieser Beitrag wurde von TBx gelöscht. - Grund: Hat sich erledigt
Alt 23. Feb 2024, 11:26     Erstellt von Benmik
Dieser Beitrag wurde von TBx gelöscht. - Grund: Hat sich erledigt
Antwort Antwort
Seite 2 von 2     12   


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 10:21 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz