Rekursion in Visual Studio

Wenn ich diesen sehr einfachen rekursiven Code ausführe, habe ich festgestellt, dass bei Verwendung von Ganzzahlparametern durch die Funktion "recursCheck ()" der Arbeitsspeicher im Win32-Modus auf 200 MB und im x64-Modus auf 45 MB springt und der Parameter vom Typ " kurz "der verwendete Speicher ist 4,7 MB Win32-Modus und 1,7 MB für x64. sizeof (int) zeigt 4 Bytes und sizeof (short) zeigt 2 Bytes. Wie ist das möglich - 1 000 000 x 2 Bytes = 2 MB und 1 000 000 x 4 Bytes = 4 MB NICHT 200 MB !!!So, warum dieses Problem auftritt (short vs int) und warum der Win32-Modus weniger Speicher benötigt als x64? Ich verwende Visual Studio 2013, 64-Bit-Betriebssystem Windows7, CPU i5, 4 GB RAM. Dasselbe Problem tritt in Visual Studio 2008 auf, es wird jedoch noch mehr Speicher benötigt - 400 MB anstelle von 200 MB.

#include "stdafx.h"
#include <cstdlib>
#include <iostream>
#define SIZE_T_T 1000000
using namespace std;

void recursCheck(int i);

int main()
{
    //cout << sizeof(int) << endl;
    int i = SIZE_T_T;
    recursCheck(i);

    system("PAUSE");
    return 0;
}

void recursCheck(int i)
{
    //cout << i << endl;
    if (i != 0)
    {
        recursCheck(--i);
    }
    else
    {
        system("PAUSE");
    }
}

Win32-MODUS MIT "i" vom Typ "int":image 1 Win32 MODE WITH "i" vom Typ "short":image 2

Ich habe auch herausgefunden, dass vor dem zweiten System ("PAUSE") vor dem Ende des Hauptprogramms der Speicher noch belegt ist. Ich weiß, dass C ++ nichtt manage memory, but shouldnt Wenn alle "recursCheck ()" - Funktionen die Freigabe des Tokenspeichers beenden? Ich verliere den Punkt der LOKALEN Variablen. Wie Sie sehen, wird der Parameter BY VALUE übergeben. SOLLTE ES NACH AUTOMATISCHEM ENDE DER FUNKTION NICHT FREIGEGEBEN WERDEN?

Antworten auf die Frage(0)

Ihre Antwort auf die Frage