频道栏目
首页 > 系统 > win7激活工具 > 正文

windows操作系统对于程序运行时堆栈的管理的研究

2014-12-28 09:59:54         来源:奋斗的伙计  
收藏   我要投稿

通过下面的代码得出了一个结论:

在windows操作系统中,栈空间不会释放,而是如果现有的栈空间满足函数的运行,则不再申请新的栈空间,但函数退出后也不释放栈空间;如果函数运行时占空间不够,则需要再申请新的空间;

使用malloc动态申请的空间因为位于堆空间,free后可以直接释放

#include <stdio.h>

#include <Windows.h>


int hello1()
{
int arra[1000*60];//占用的栈空间大小大概为0.2MB
int i=0;
for(i=0;i<1000;i++)
{
arra[i]=1024;
}
for(i=0;i<40;i++)//等待4秒
{
Sleep(100);
printf("arra[%d] is %d\n",arra[i]);
}
return 0;
}


int hello2()
{
int arra[1000*150];//占用的栈空间大小大概为0.5MB
int i=0;
for(i=0;i<1000;i++)
{
arra[i]=1024;
}
for(i=0;i<40;i++)//等待4秒
{
Sleep(100);
printf("arra[%d] is %d\n",arra[i]);
}
return 0;
}


int hello3()
{
int arra[1000*100];//占用的栈空间大小大概为0.4MB
int i=0;
for(i=0;i<1000;i++)
{
arra[i]=1024;
}
for(i=0;i<40;i++)//等待4秒
{
Sleep(100);
printf("arra[%d] is %d\n",arra[i]);
}
return 0;
}


int main()
{
int i=56;
int ret;
char * tmp_buf;
printf("i is %d\n",i);
for(i=0;i<10;i++)
{
Sleep(1000);
printf("sleep %d seconds\n",i);
}
//hello1()执行前,大概是0.2MB
ret=hello1();
//执行后,大概是0.4MB
hello2();
//hello2()执行后,大概是0.7MB
hello3();
//hello3()执行后,仍然是0.7MB,说明在windows系统中,栈空间会一直增加,而不会减少,但一般不会超过编译器默认的栈大小(程序员不改变的情况下)

printf("game over!");
for(i=0;i<5;i++)
{
printf("over wait %d seconds\n",i);
Sleep(1000);
}

tmp_buf=(char *)malloc(1024*1024);

for(i=0;i<5;i++)
{
printf("over wait %d seconds\n",i);
Sleep(1000);
}
//tmp_buf释放前,程序运行时,占用内存大小为1.8MB
free(tmp_buf);
//tmp_buf释放后,程序运行时,占用内存大小为0.7MB,说明free可以直接释放空间
for(i=0;i<5;i++)
{
printf("over wait %d seconds\n",i);
Sleep(1000);
}
return 0;
}
相关TAG标签 堆栈 程序
上一篇:如何在Window64bit系统上面区分此应用程序是32bit还是64bit的呢?
下一篇:在阿里云、微软WindowsAzure、亚马逊AWS上使用Nginx配置http正向代理服务器
相关文章
图文推荐

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站