![]() |
su. nach speichersparender Array-Variante
Hallo,
Bin bei meiner Programmierung auf der Suche nach einer speicherplatzsparenden Array-Variante. Mein Array im untenstehendes Code führt bei einer Arraydimension [1..512, 1..512, 1..100] zumZulaufen desd Arbeitsspeichers. Error:= 'zu wenig Arbeitsspeicher'; Codebeispiel:
Delphi-Quellcode:
Hat nicht jemand eine Idee ?!TEB_Pix = class(TObject) private FPix: integer; procedure SetPix(const Value: integer); function getPix: integer; protected public published property Pix: integer read getPix write SetPix; end; TEB_Grauwert = class(TObject) private FGrauwert: word; procedure SetGrauwert(const Value: word); function GetGrauwert: word; protected public published property Grauwert: word read GetGrauwert write SetGrauwert; end; TEB_PixMatrix = array of array of TEB_Pix; // 512 x 512 TEB_GrauMatrix = array of array of array of TEB_Grauwert; // 512 x 512 x 100 TEB_Buffer = array of Byte; { TEB_Bild } TEB_Bild = class(TObject) private ... FPixMatrix: TEB_PixMatrix; FGrauMatrix: TEB_GrauMatrix; ... ... function GetGrauMatrix(Xind, Yind, Zind: integer): TEB_Grauwert; function GetPixMatrix(Xind, Yind: integer): TEB_Pix; procedure SetGrauMatrix(Xind, Yind, Zind: integer; const Value: TEB_Grauwert); procedure SetPixMatrix(Xind, Yind: integer; const Value: TEB_Pix); protected public property PixMatrix[Xind, Yind: integer]: TEB_Pix read GetPixMatrix write SetPixMatrix; property GrauMatrix[Xind, Yind, Zind: integer]: TEB_Grauwert read GetGrauMatrix write SetGrauMatrix; ... published ... end; var Bild: TEB_Bild; Danke im Voraus EB PS: WinXP prof 2GB RAM 2GB Page |
Re: su. nach speichersparender Array-Variante
Hast du mal berechnet, wie viel Speicher belegt werden würde
512 * 512 * 100 * 2 Byte = 52428800 KByte = 50 GB |
Re: su. nach speichersparender Array-Variante
Hallo mkinzer,
danke, aber ich glaube hier an einenRechenfehler. 1 Word = 2Byte und somit wären es 50 MB Liege ich hier falsch ?? EB |
Re: su. nach speichersparender Array-Variante
Also ich komme auf 512 * 512 * 100 * 4 (eine Objektreferenz ist doch 4 Byte groß, oder?) = 104.857.600 Byte zzgl. Speicherbedarf für die Objekte selbst.
|
Re: su. nach speichersparender Array-Variante
Stimmt, habe übersehen, dass es eine Klasse ist (bin von einem Record ausgegangen). Die 2 bezogen sich auf FGrauWert (Word). Da es Klssen sind, kommt diese noch dazu; dann wären es schon 150GB Platzbedarf
|
Re: su. nach speichersparender Array-Variante
hallo mKinzer,
verstehe ich leider nicht record -- Klassen ? 150 GB ? Danke EB |
Re: su. nach speichersparender Array-Variante
GB? Eher MB ;)
|
Re: su. nach speichersparender Array-Variante
Zitat:
Grüße Klaus |
Re: su. nach speichersparender Array-Variante
Haste recht: sind ja Bytes
512 * 512 * 100 * (4 + 2) = 157.286.400 Bytes /1024 = 153.600 KByte / 1024 = 150 MBytes |
Re: su. nach speichersparender Array-Variante
mKinzer,
nun ist leider die Diskussion entgleist. mKinzer, ich wollte Dich nicht blamieren, will einfach nur mein Programm zum laufen bringen. Gruß EB |
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:25 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