使用简单递归验证VC6环境的栈大小
2012-07-14 22:22
232 查看
以下是在VC6环境中试验,其他VS2008,VS2010一样的方式,结果可能不一样。
VC6的栈空间被默认设置为1M(1024*1024 = 0x100000)字节,可以通过 ① MSDN的索引页面中找/F编译器选项;② 使用dumpbin /headers test.exe列出;
下面是一个累加的递归程序,分别在默认VC6的debug设置、release设置、将堆栈设置为2M(0x200000)字节后,一直运行到最后的次数(最后一次栈未溢出):
VC6下设置栈空间的方式,如下图被设置为2M字节:
在默认debug模式下,i的最后一次为11773,依此推断每次调用函数的开销为:(1024*1024)/11773≈90字节左右;
在默认release模式下,i的最后一次为86346,依此推断每次调用函数的开销:(1024*1024)/86346≈12字节左右;
在设置2M栈空间release模式下,i的最后一次为173728,依此推断每次调用函数的开销:(2*1024*1024)/173728≈12字节左右;
上面具体的每次调用函数开销可以单次按F11跟踪ESP统计精确数据。
VC6的栈空间被默认设置为1M(1024*1024 = 0x100000)字节,可以通过 ① MSDN的索引页面中找/F编译器选项;② 使用dumpbin /headers test.exe列出;
下面是一个累加的递归程序,分别在默认VC6的debug设置、release设置、将堆栈设置为2M(0x200000)字节后,一直运行到最后的次数(最后一次栈未溢出):
#include <stdio.h> // // 使用递归实现【累计和】,如“1+2+....+99+100” // int Add(int m) { if (m == 1) { return 1; } else { return m + Add(m-1); } } // // 使用递归实现【阶乘】,如“1*2*....*99*100” // int Factor(int m) { if (m == 1) { return 1; } else { return m* Factor(m-1); } } void main() { int i = 0; for (i=50000; i<=1000000; i++) { printf("i = %d, 累积和= %d\n", i, Add( i)); } }
VC6下设置栈空间的方式,如下图被设置为2M字节:
在默认debug模式下,i的最后一次为11773,依此推断每次调用函数的开销为:(1024*1024)/11773≈90字节左右;
在默认release模式下,i的最后一次为86346,依此推断每次调用函数的开销:(1024*1024)/86346≈12字节左右;
在设置2M栈空间release模式下,i的最后一次为173728,依此推断每次调用函数的开销:(2*1024*1024)/173728≈12字节左右;
上面具体的每次调用函数开销可以单次按F11跟踪ESP统计精确数据。
相关文章推荐
- 【Kotlin 语言】1. 环境安装 | 变量 | 简单使用 | 函数 | 异常 | 递归
- NFS环境的架设,以及samba简单使用
- [转]VC6.0中使用MFC开发ActiveX及简单验证
- 在多线程环境中使用CoreData,以及一个简单的封装
- Android环境搭建2--Ubuntu12.04下Windows软件的安装(Wine的简单使用)
- windows下使用gvim搭建简单的IDE编译环境(支持C/C++/Python等)
- ASP.NET jQuery 实例12 通过使用jQuery validation插件简单实现用户注册页面验证功能
- Java项目开发环境构建工具 Gradle 使用笔记(简单、基本)
- Linux环境下Maven仓库的搭建(nexus)及Mavan的简单使用
- client高性能组件化框架React简单介绍、特点、环境搭建及经常使用语法
- 简单两步快速实现shiro的配置和使用,包含登录验证、角色验证、权限验证以及shiro登录注销流程
- client高性能组件化框架React简单介绍、特点、环境搭建及经常使用语法
- 正则表达式验证格式(ip地址验证)的简单使用.
- 使用正则表达式进行简单的邮箱验证操作
- XUtils3 的 环境搭建与简单使用
- joi模块验证的介绍与使用——一种基于schema的nodejs的对象校验,简单易用
- 在linux环境下安装Memcached及其简单使用+相关文档
- C# 验证/升位公民身份号码/身份证号码 最简单的 本人原创使用请缴纳版权费用!
- VC6++和VS2003/2005下的DOXYGEN注释宏及其配置使用环境
- 使用VC2008制作简单大航海外传内存修改器