![]() |
max size von array of byte?
huhu,
also folgender Code funzt:
Code:
aber ab: 1036276, kommt schon ein StackOverflow.
buffer : array[0..1036275] of Byte;
Kann man da was machen, um ein größeres Array nutzen zu können? |
AW: max size von array of byte?
Guten Abend,
a) Stacksize erhöhen oder b) dynamische Array benutzen Grüße Klaus |
AW: max size von array of byte?
Zitat:
1. The total memory on the platform. 2. The amount of memory allocated to the program. 3. The compiler's settings. gruss |
AW: max size von array of byte?
- 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:
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
Delphi-Quellcode:
- maximal der größte zusammenhängende freie Speicherblock
0 bis 2 GB - 2*SizeOf(Integer) - 1
(effektiv maximal 0,7 bis 1,5 GB) |
AW: max size von array of byte?
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! |
AW: max size von array of byte?
Zitat:
gruss |
AW: max size von array of byte?
Dann lege den Speicher nicht auf den Stack, sondern auf den Heap:
Delphi-Quellcode:
Das Beispiel ist nur zur Verdeutlichung. Die dafür gedachten Typen sind SysUtils.TByteArray und PByteArray (8 Bit) und TWordArray und PWordArray (16 Bit).
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; |
AW: max size von array of byte?
Bitte :D
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. |
AW: max size von array of byte?
thx für die Infos :)
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:55 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-2025 by Thomas Breitkreuz