C++ visualstudio中的递归

C++ visualstudio中的递归,c++,memory,parameters,int,short,C++,Memory,Parameters,Int,Short,当我运行这个非常简单的递归代码时,我发现当函数“recurseCheck()”使用整数参数时,我的内存在Win32模式下跳到200 MB,在x64模式下跳到45 MB,当参数类型为“short”时,在Win32模式下使用的内存为4.7 MB,在x64模式下使用的内存为1.7 MB。sizeof(int)显示4个字节,sizeof(short)显示2个字节。这怎么可能呢?1 000 000 x 2字节=2 MB和1 000 000 x 4字节=4 MB而不是200 MB为什么会出现这个问题(短vs

当我运行这个非常简单的递归代码时,我发现当函数“recurseCheck()”使用整数参数时,我的内存在Win32模式下跳到200 MB,在x64模式下跳到45 MB,当参数类型为“short”时,在Win32模式下使用的内存为4.7 MB,在x64模式下使用的内存为1.7 MB。sizeof(int)显示4个字节,sizeof(short)显示2个字节。这怎么可能呢?1 000 000 x 2字节=2 MB和1 000 000 x 4字节=4 MB而不是200 MB为什么会出现这个问题(短vs int),为什么Win32模式占用的内存比x64少?我使用的是Visual Studio 2013、64位操作系统Windows7、CPU i5、4 GB RAM。同样的问题在VisualStudio2008中也会发生,但占用的内存甚至更多——从200MB增加到400MB

#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");
    }
}
#包括“stdafx.h”
#包括
#包括
#定义大小\u T\T 1000000
使用名称空间std;
无效检查(int i);
int main()
{

//cout A
short
无法保存1000000的值,因此它可能会减少递归次数。不仅仅是参数被推送到堆栈上;返回地址也被推送到堆栈上,编译器还可能生成代码来设置每个函数调用的堆栈帧。您在哪种优化级别构建?@nicksona,您在构建什么se:调试还是发布?发布模式可能包括尾部调用递归优化,以防止堆栈增长。@Matthew递归部分没有做任何事情,因此它实际上在发布模式下完全优化了。
recurseCheck
的主体被简化为对
系统的调用,该调用本身被优化为tai我打电话给x64(老实说,最后一部分给我留下了深刻的印象)。