深入理解局部变量在堆栈中的结构
作者:admin 日期:2010-06-30
一直对一些东西都是模模糊糊的,有时候自我感觉已经很清楚了,但是过一段时间要用到这些知识的时候又感觉比较混乱,于是最好的办法就是通过实践来解决这些问题,这样比较直观。
通过一下的分析可以对数组在内存的分布、堆栈内的顺序等一些问题得到解答,基本上就两张图,看不懂的话留言交流,个人技术也很菜,如有错误望纠正。
1、摘自谭浩强里面的一段代码,修改了下:
调试截图:

2、修改后的一段代码再次调试:
就只修改了这部分,然后调试截图

3、总结如下
1)、数组的标号保存的是数组的首地址;
2)、int 分配4字节,char 分配1字节;
3)、堆栈从高地址到低地址增长,同时定义两个变量,参数从右向左入栈(stdcall);
通过一下的分析可以对数组在内存的分布、堆栈内的顺序等一些问题得到解答,基本上就两张图,看不懂的话留言交流,个人技术也很菜,如有错误望纠正。
1、摘自谭浩强里面的一段代码,修改了下:
复制内容到剪贴板
程序代码
程序代码#include "stdafx.h"
#include "stdio.h"
int main(int argc, char* argv[])
{
int i,a[10];
for (i=0;i<=9;i++)
{
a[i]=i;
}
for (i=9;i>=0;i--)
{
printf("%d",a[i]);
}
printf("\n");
return 0;
}
#include "stdio.h"
int main(int argc, char* argv[])
{
int i,a[10];
for (i=0;i<=9;i++)
{
a[i]=i;
}
for (i=9;i>=0;i--)
{
printf("%d",a[i]);
}
printf("\n");
return 0;
}
调试截图:
2、修改后的一段代码再次调试:
复制内容到剪贴板
程序代码
程序代码 int a[10];
char c;
int i;
for (i=0;i<=9;i++)
{
a[i]=i;
}
c ='s';
char c;
int i;
for (i=0;i<=9;i++)
{
a[i]=i;
}
c ='s';
就只修改了这部分,然后调试截图
3、总结如下
1)、数组的标号保存的是数组的首地址;
2)、int 分配4字节,char 分配1字节;
3)、堆栈从高地址到低地址增长,同时定义两个变量,参数从右向左入栈(stdcall);
评论: 0 | 引用: 0 | 查看次数: 207
发表评论
上一篇
下一篇


文章来自:
Tags:
相关日志:
