Speicher schon voll??



  • Hi, ich habe gerade mit c++ angefangen und sollte in einer Übung in einer Endlosschleife lediglich int[1000] auf den Heap bringen, den counter speichern und hinterher ausgeben, wie oft ein int[1000] auf den Heap passt. Nun kamen dabei knapp 550.000 raus, aber das sind doch gerade mal über 2.000.000 Byte, also ungefähr 2 MB. Wie kann das sein, bei einem Speicher von 2 GB im Rechner, oder befindet sich der grösste Speicher auf dem stak?
    Ich hab diese sache auch auf einem anderen Rechner durchlaufen lassen mit ähnlichem Ergebnis. ich kapier das nicht, wie kann man denn nun seinen Speicher voll auslasten, gibts da irgendwelche Tricks?



  • man kann die größe des heaps in den optionen festlegen
    bei vc++2003 projekteigenschaften -> linker -> system



  • ah ok danke, also könnte ich da 1,8GB in Bytes reinschreiben oder so und schon könnt ich diese 1,8gb dann auch problemlos nutzen?



  • eigentlich glaube ich das du das nicht auf den heap, sondern auf dem stack hast

    for(long i = 0; i< 99999; i++){
    	int *ar = new int[1000] ;
    		}
    

    der code funktioniert ...



  • Ist doch anders rum.

    int i[1000];
    

    Kommt auch den Stack und der ist meistens kleiner.

    int i* = new int[10000]
    

    Kommt auf den Heap und der ist sehr groß.



  • ja meinte ich ja, auf den Heap mit int *p = new int[1000];
    das in einer Schleife läuft halt 550.000 mal durch, danach ist schluss. Naja ich probier mal ein wenig mit den grössen herum.
    Weiss jemand wie ich den Namespace Microsoft.VisualStudio.VCProjectEngine einbinden kann um dann auf

    property int HeapReserveSize {
        int get ();
        void set ([InAttribute] int ReserveSize);
    

    zugreifen zu können?



  • Newbie17 schrieb:

    ja meinte ich ja, auf den Heap mit int *p = new int[1000];
    das in einer Schleife läuft halt 550.000 mal durch, danach ist schluss. Naja ich probier mal ein wenig mit den grössen herum.
    Weiss jemand wie ich den Namespace Microsoft.VisualStudio.VCProjectEngine einbinden kann um dann auf

    property int HeapReserveSize {
        int get ();
        void set ([InAttribute] int ReserveSize);
    

    zugreifen zu können?

    1000*4*550000=2200000000
    was gibt es daran auszusetzen?



  • Dieser Thread wurde von Moderator/in evilissimo aus dem Forum C++ in das Forum C++/CLI mit .NET verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • Newbie17 schrieb:

    ah ok danke, also könnte ich da 1,8GB in Bytes reinschreiben oder so und schon könnt ich diese 1,8gb dann auch problemlos nutzen?

    Nein! Es macht auch keinen Sinn einen Stack > 2 MB zu haben.
    Wenn Du Speicher allokieren willst, dann mach das bitte via new/malloc.
    Der Stack muss immer zusammenhängend sein und wächst von oban nach unten und unterliegt deahalb schon mal gewissen Grenzen. Auf dem Stack sollte man nie grosse Daten ablegen.

    (EDIT: nicht Heap, sondern Stack; danke Optimizer...)



  • Du meinst jetzt aber schon den Stack, oder?



  • ok vielen dank für die ANtworten. Es ging ja eigentlich dann schon vorher korrekt, nur habe ichs halt nicht nach der 'Formel' von Camper berechnet. So passt das schon.


Anmelden zum Antworten