Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi su. nach speichersparender Array-Variante (https://www.delphipraxis.net/141744-su-nach-speichersparender-array-variante.html)

EccoBravo 15. Okt 2009 10:57


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:
 
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;
Hat nicht jemand eine Idee ?!


Danke im Voraus

EB

PS:
WinXP prof
2GB RAM
2GB Page

mkinzler 15. Okt 2009 11:07

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

EccoBravo 15. Okt 2009 11:10

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

DeddyH 15. Okt 2009 11:12

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.

mkinzler 15. Okt 2009 11:16

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

EccoBravo 15. Okt 2009 11:18

Re: su. nach speichersparender Array-Variante
 
hallo mKinzer,

verstehe ich leider nicht

record -- Klassen ?

150 GB ?

Danke EB

Tyrael Y. 15. Okt 2009 11:20

Re: su. nach speichersparender Array-Variante
 
GB? Eher MB ;)

Klaus01 15. Okt 2009 11:20

Re: su. nach speichersparender Array-Variante
 
Zitat:

Zitat von mkinzler
Hast du mal berechnet, wie viel Speicher belegt werden würde
512 * 512 * 100 * 2 Byte = 52428800 KByte = 50 GB

Kannst Du mir mal verraten wie Du da auf 50 GigaByte (50 * 10^9) kommst?

Grüße
Klaus

mkinzler 15. Okt 2009 11:23

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

EccoBravo 15. Okt 2009 11:24

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 21:33 Uhr.
Seite 1 von 2  1 2      

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