AGB  ·  Datenschutz  ·  Impressum  







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

max size von array of byte?

Ein Thema von TheGame1492 · begonnen am 2. Jul 2011 · letzter Beitrag vom 3. Jul 2011
Antwort Antwort
Benutzerbild von TheGame1492
TheGame1492

Registriert seit: 31. Jul 2004
Ort: Berlin
84 Beiträge
 
Delphi XE2 Professional
 
#1

max size von array of byte?

  Alt 2. Jul 2011, 19:32
huhu,

also folgender Code funzt:
Code:
buffer : array[0..1036275] of Byte;
aber ab: 1036276, kommt schon ein StackOverflow.

Kann man da was machen, um ein größeres Array nutzen zu können?
  Mit Zitat antworten Zitat
Klaus01

Registriert seit: 30. Nov 2005
Ort: München
5.768 Beiträge
 
Delphi 10.4 Sydney
 
#2

AW: max size von array of byte?

  Alt 2. Jul 2011, 19:37
Guten Abend,

a) Stacksize erhöhen
oder
b) dynamische Array benutzen

Grüße
Klaus
Klaus
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#3

AW: max size von array of byte?

  Alt 2. Jul 2011, 19:37
huhu,

also folgender Code funzt:
Code:
buffer : array[0..1036275] of Byte;
aber ab: 1036276, kommt schon ein StackOverflow.

Kann man da was machen, um ein größeres Array nutzen zu können?
The amount of memory available depends on:
1. The total memory on the platform.
2. The amount of memory allocated to the program.
3. The compiler's settings.

gruss
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: max size von array of byte?

  Alt 2. Jul 2011, 20:50
- Lokale Variablen liegen auf dem Stack.
- Die Daten eines statischen Arrays liegt dort wo seine Variable liegt.
(dynamische Arrays sind ein Zeiger und die Daten auf dem Heap)
- Die Größe des Stacks ist begrenzt.

Lösung: Wenn das Array zu groß ist, nimm ein dynamisches Array.

Aber notfalls könnte man auch den Stack noch etwas vergrößern.


Zitat:
The amount of memory available depends on:
1. The total memory on the platform.
2. The amount of memory allocated to the program.
Nein.

Den Stack sollte man nicht unengdlich Groß machen.
Bei spätestens 10 MB im Stack, liegt definitiv ein Designproblem vor.

Ansonsten: Maximale größe eines dynamischen Array of Byte
- maximal 0 bis 2 GB - 2*SizeOf(Integer) - 1 - maximal der größte zusammenhängende freie Speicherblock

(effektiv maximal 0,7 bis 1,5 GB)
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.

Geändert von himitsu ( 3. Jul 2011 um 10:34 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Aphton
Aphton

Registriert seit: 31. Mai 2009
1.198 Beiträge
 
Turbo Delphi für Win32
 
#5

AW: max size von array of byte?

  Alt 2. Jul 2011, 22:14
schau dir mal folgendes an:
{$MINSTACKSIZE <Value>}
{$MAXSTACKSIZE <Value>}

Weiters: Lass dein Array nich zu groß werden - sonst wird das System instabil / zu langsam - wenn zb. die Anwendung > 1 gb RAM benötgit!
das Erkennen beginnt, wenn der Erkennende vom zu Erkennenden Abstand nimmt
MfG
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#6

AW: max size von array of byte?

  Alt 3. Jul 2011, 07:24
- Lokale Variablen liegen auf dem Stack.
- Die Daten eines statischen Arrays liegt dort wo seine Variable liegt.
(dynamische Arrays sind ein Zeiger und die Daten auf dem Heap)
- Die Größe des Stacks ist begrenzt.

Lösung: Wenn das Array zu groß ist, nimm ein dynamisches Array.

Aber notfalls könnte man auch den Stack noch etwas vergrößern.


Zitat:
The amount of memory available depends on:
1. The total memory on the platform.
2. The amount of memory allocated to the program.
Nein.

Den Stack sollte man nicht unengdlich Groß machen.
Bei spätestens 10 MB im Stack, liegt definitiv ein Designproblem vor.

Ansonsten: Maximale größe eines dynamischen Array of Byte
- maximal 0 bis 2 GB - 2*SizeOf(Integer) - 1 - maximal der Größe zusammenhängende freie Speicherblock

(effektiv maximal 0,7 bis 1,5 GB)
Danke für die Infos kann ich auch sicherlich mal gebrauchen

gruss
  Mit Zitat antworten Zitat
Panthrax

Registriert seit: 18. Feb 2005
286 Beiträge
 
Delphi 2010 Enterprise
 
#7

AW: max size von array of byte?

  Alt 3. Jul 2011, 10:41
Dann lege den Speicher nicht auf den Stack, sondern auf den Heap:
Delphi-Quellcode:
type
  TArray = array[0..0] of Byte;
  PArray = ^TArray;
var
  P: Pointer;
  A: PArray;
begin
  P := GetMem(50 * 1024 * 1024); // 50 MB

  A := P;
  A^[0] := 0;
  A^[1 * 1024 * 1024] := 1;
  A^[2 * 1024 * 1024] := 2;
  A^[2 * 1024 * 1024] := 3;
  // ...

  FreeMem(P);
end;
Das Beispiel ist nur zur Verdeutlichung. Die dafür gedachten Typen sind SysUtils.TByteArray und PByteArray (8 Bit) und TWordArray und PWordArray (16 Bit).
"Es gibt keine schlimmere Lüge als die Wahrheit, die von denen, die sie hören, missverstanden wird."
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: max size von array of byte?

  Alt 3. Jul 2011, 10:56
Bitte

Gilt aber natürlich nur für das 32 Bit-Delphi,
wo man eben nur 2 GB (in Ausnahmefällen 3 GB) virtuellen Speicher pro Prozess hat,
wo auch noch überall in dem verfügaren Speicher DLLs und sonstwas verteilt rumliegen und es so verhindern, daß man einen wirklich großen zusammenhängenden Speicherblock bekommt.

Unter 64 Bit könnte man dagegen wirklich mal einen Block bekommen, wo nur noch der RAM+Auslagerungsdatei die Grenze bilden.


@Panthrax: Aber bitte nicht den Resourcenschutzblock vergessen.
PS: ein dynamisches Array besitzt automatisch einen Resourcenschutzblock und es wird auch automatisch freigegeben.
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.

Geändert von himitsu ( 3. Jul 2011 um 13:03 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von TheGame1492
TheGame1492

Registriert seit: 31. Jul 2004
Ort: Berlin
84 Beiträge
 
Delphi XE2 Professional
 
#9

AW: max size von array of byte?

  Alt 3. Jul 2011, 13:02
thx für die Infos
  Mit Zitat antworten Zitat
Antwort Antwort


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 21:44 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