wieviel variablen eines structs sind möglich?
-
Alles klar, habt vielen Dank!
Nur noch kurz zu Bashar - was meinst Du mit Deiner Aussage?
-
die erklärung schrieb:
_iop schrieb:
Wieso kann ich dann diese ca 5 MB nicht auf dem Stack speichern?
kurz und knapp: die größe des stackspeichers ist konstant und begrenzt. afaik ist da bei 2 mb schluss. größere datenbrocken deshalb besser per allokation auf dem heap anlegen.
Ja, std::vector kenne ich. Meinst Du, ich sollte das Struct einfach in einen Vector packen? Gute Idee! Das werd ich machen.
ist auf jeden fall einfacher und vor allem leichter zu handhaben als ein nacktes array.Ist das so? Und ich dachte immer, man kann die Stackgröße als Linker-Option mitgeben.
Mit /STACK z.B.
-
_iop schrieb:
Nur noch kurz zu Bashar - was meinst Du mit Deiner Aussage?
Dass ein Array nur eine Variable ist.
-
Ok, seh ich ein


-
CSpille schrieb:
Die Größe des Stacks ist afaik unter Windows auf 1MB begrenzt.
Dieser wird on demand vergeben. Welchen Grund es dafür gibt, kann ich dir leider nicht sagen.Das Schützt wunderbar vor Endlosrekursionen.
-
aufpassen nich jedes Objekt das ohne "new" angelegt wird ist aufm stack..
class XY{ double A,B; XY(double a, double b) : A(a),B(b){} }; class Block{ XY z; Block() : z(0.0,0.0){ } }; Block *p= new block();
-
BorisDieKlinge schrieb:
aufpassen nich jedes Objekt das ohne "new" angelegt wird ist aufm stack..
EDIT: Upps falsch gelesen...
Allerdings werden diese klasseninternen Objekte wie auf dem Stack behandelt, da ihre Destruktoren automatisch aufgerufen werden und der Speicher ebenfalls automatisch freigegeben wird.Gruß
Don06
-
weil viel sich daran klammern
Objekt A; //Auf jedenfall stack Objekt *A= new Objekt; //Heap
-
BorisDieKlinge schrieb:
weil viel sich daran klammern
Objekt A; //Auf jedenfall stack Objekt *A= new Objekt; //HeapJo, aber wenns in class Objekt sowas gibt:
void Objekt::funkt() { some_type_t arr[100000]; } //und dann Objekt *A= new Objekt; //Heap A->funkt(); //wo landet wohl arr? Jau, aufm Stack.Das Problem sind immer alle Autovariablen. Die landen immer auf dem Stack.
Neben dem Heap gilt dies übrigens auch NICHT für globale Variablen.
-
_iop schrieb:
Mein Struct hat 15 Integer und 2 Bool Variablen. Davon wollte ich so um die 80000 Stück erstellen.
Wenn ich das ganze so erstelle..
struct meinstruct { //15xint; //2xbool; }; meinStruct meineDaten[80000];..bricht der Compiler das Programm ab.
Erstelle ich das Ganze mit "new" läuft alles prima... deswegen wundere ich mich...
Bist du sicher das du alle 15 Variablen tatsächlich brauchst?
Vielleicht bietet sich für dein Vorhaben ja auch eine union an

enum Type { A, B, C, D, E, F, G, H }; struct beispiel { union { int a, b, c, d, e, f, g, h; } Type type; }; // ... beispiel blub; blub.type = A; blub.a = 100;Code ungetestet...
-
Tachyon schrieb:
Ist das so? Und ich dachte immer, man kann die Stackgröße als Linker-Option mitgeben.
Mit /STACK z.B.ja, man kann bei manchen compilern die stackgröße beeinflussen. "konstant" und "begrenzt" ist sie dann aber immer noch. also: ja, das ist so.
-
die erklärung schrieb:
compilern
linker war gemeint.
-
asdsd schrieb:
union
{
int a, b, c, d, e, f, g, h;
}wer macht denn so etwas?