Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   Arraygrösse und Stack Overflow (https://www.delphipraxis.net/214682-arraygroesse-und-stack-overflow.html)

Uwe Raabe 21. Feb 2024 14:02

AW: Arraygrösse und Stack Overflow
 
Zitat:

Zitat von johndoe049 (Beitrag 1533743)
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.

johndoe049 21. Feb 2024 14:18

AW: Arraygrösse und Stack Overflow
 
Zitat:

Zitat von Uwe Raabe (Beitrag 1533746)
Zitat:

Zitat von johndoe049 (Beitrag 1533743)
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.

himitsu 21. Feb 2024 16:19

AW: Arraygrösse und Stack Overflow
 
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
Delphi-Quellcode:
xxx: array[0..99] of Byte;


ABER, leider ist teilweise das Letzte auch für den Compiler das Selbe. :wall:
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
Delphi-Quellcode:
array[..] of Xyz;
sind direkt im Typ gespeichert und beim
Delphi-Quellcode:
array of Xyz;
noch mit einem Pointer dazwischen.
Delphi-Quellcode:
@Arr[0]
zeigt bei dynamisch und statisch auf die Daten.
Delphi-Quellcode:
@Arr
kommt beim Statischen auf's Gleiche raus, aber beim Dynamischen zeigt es auf den "internen" Array-Pointer.

Und bei
Delphi-Quellcode:
array of array of ...
das Gleiche,
Delphi-Quellcode:
array[..] of array[..] of ...
liegen auch die SubArrays hintereinander,
Delphi-Quellcode:
array[..] of array of ...
bzw
Delphi-Quellcode:
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)

Kas Ob. 21. Feb 2024 17:45

AW: Arraygrösse und Stack Overflow
 
Liste der Anhänge anzeigen (Anzahl: 1)
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.
Anhang 56667


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:27 Uhr.
Seite 2 von 2     12   

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