函数压栈顺序 -- C
来源:互联网 发布:seo吧 编辑:程序博客网 时间:2024/05/22 12:51
基础知识:
一个程序的运行起来后,其在内存中有5个区域
1. 程序代码区
这个很简单,代码要执行,肯定要加载进内存, 我们不必关心。
2. 文字常量区
一般我们这样定义一个字符串时,其是在文字常量区的:
char* s1 = "hello, world";
char* s2 = "hello, world";
if(s1 == s2)
printf("s1和s2指向同一个在文字常量区的字符串");
这里, s1和s2指向的是同一个字符串
3. 静态存储区
全局变量,静态变量会放在这个区域,事实上,全局变量也是静态的。
以上1,2,3三个区域的内存在程序起来的时候就开辟好了的。
4. 栈
局部变量就是在栈里的。另外,函数调用时的参数也是在栈里的,这个现在不必关心
5. 堆
malloc或new出来的内存就是在堆里的,需要程序员自己管理清除。
#include <stdio.h>#include <stdlib.h>#include <string.h>/*压栈顺序从右到左,从上到下压*/int fun(int i, char * s){/*编译器中等同于int a;int b;*/int a,d;printf("&s = 0x%08x\n", &s);printf("&i = 0x%08x\n", &i);printf("&f = 0x%08x\n", &fun);printf("&a = 0x%08x\n", &a);printf("&d = 0x%08x\n", &d);}/*[root@localhost test_class]# ./a.out &s = 0xbff4b284&i = 0xbff4b280&f = 0x08048404&a = 0xbff4b26c&d = 0xbff4b268*/intmain(){int i = 0x22222222;char * s = "aaaa";fun(i, s);}
/*栈 -- 从高地址到低地址堆 -- 从低地址到高地址如下图*/
0 0
- 函数压栈顺序 -- C
- C/C++ 函数压栈顺序
- 关于C函数参数压栈顺序
- c/c++的函数参数压栈顺序
- c/c++的函数参数压栈顺序
- c/c++的函数参数压栈顺序
- C语言函数调用参数压栈顺序
- c/c++的函数参数压栈顺序
- c/c++的函数参数压栈顺序
- 函数压栈顺序
- C函数调用与入栈顺序
- c语言函数参数入栈顺序
- C语言函数入栈顺序
- C函数调用与入栈顺序
- C语言函数调用时参数压栈的顺序以及函数指针的作用
- 【小记备忘】之C/C++函数调用约定,函数参数压栈顺序【2013.12.09】
- C语言函数入栈顺序与可变参数函数
- C语言函数入栈顺序与可变参数函数
- PowerPC家谱史
- 快速排序,堆排序和归并排序谁更快?
- HDU4751 -(广义孪生素数猜想)
- FireFox语言包安装
- object-c编程tips-kvokvc浅析
- 函数压栈顺序 -- C
- 用C#编写AutoCAD中的直线
- Android动画机制全解析
- ASP.NET页面间的传值
- 自定义ListView,头部视图悬停
- POJ 3164 Command Network 最小树形图
- 2014.8.5 - 多校5
- 2014.8.6学习笔记
- Formatting Text - UVa 709 POJ 1093 dp