当我运行这个非常简单的递归代码时,我发现当函数“recursCheck()”使用整数参数时,我的内存在 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 !那么为什么会出现这个问题(short vs int)以及为什么 Win32 模式比 x64 占用更少的内存?我使用的是 Visual Studio 2013、64 位操作系统 Windows7、CPU i5、4 GB RAM。同样的问题发生在 Visual Studio 2008 中,但占用的内存更多 - 400 MB 而不是 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 模式,“i”类型为“int”:image 1 http://postimg.org/image/80bcc8gyp/“i”类型为“short”的 Win32 模式:image 2 http://postimg.org/image/3k4r4c8s5/
我还发现在主程序结束之前的第二个系统(“暂停”)之前,内存仍在使用中。我知道 C++ 没有t manage memory, but shouldn
当所有“recursCheck()”函数结束时,令牌内存会被释放吗?我失去了 LOCAL 变量的意义。您如何看待参数是按值传递的。函数结束后不应该自动释放吗?
None
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)