内存分区与函数调用

内存分区与函数调用

ID:40150904

大小:232.00 KB

页数:14页

时间:2019-07-23

内存分区与函数调用_第1页
内存分区与函数调用_第2页
内存分区与函数调用_第3页
内存分区与函数调用_第4页
内存分区与函数调用_第5页
资源描述:

《内存分区与函数调用》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、1代码区(代码段,函数区)顾名思义:用于存放代码,这里特指函数的代码。存放了唯一一份函数定义的二进制代码。有全局的地址:函数名称。2栈区函数调用时临时开辟的内存空间。由系统自动分配,自动回收。类似数据结构中的栈。3带参数的函数voidfun(inta,intb){intc=a*b;printf("c=%d",c);}intmain(){inta=0;fun(2,4);return0;}4函数调用(示意图)maina04funcab28printfsystem5函数调用调用开辟栈空间。值拷贝:形式参

2、数(形参)拷贝实参的值。返回函数在遇到return语句,或函数体结束时返回。有返回值的函数,函数调用结束后,会把返回值放在某个地方(寄存器),由函数的调用方读取。先声明再使用无论是函数,还是变量,都遵循先声明(定义)再使用函数中声明的局部变量,要放在函数体的前部全局变量(函数之外)放在它被使用之前。2021/8/567参数传递传变量voidf(inta)传地址(传指针)voidf(int*p)传引用(C++)voidf(int&p)传数组(一维)voidf(inta[],intn)传递数组一维数组传递

3、参数:f(inta[],intn)指向数组元素首地址的指针p,元素个数np用来偏移地址,迭代地指向每个元素n用来限定偏移的范围,以防止非法访问二维数组的两种传递参数的办法8intb[2][3]voidg(int(*b)[3],intn)voidg(intb[][3],intn)voidg(int*b,intm,intn)9堆区程序员自己分配,自己回收。程序结束时,操作系统会回收其所占用的进程空间。堆的生长方向是向上的,向着内存地址增加的方向;栈生长方向是向下的向着内存地址减小的方向在堆上可以声明动态数

4、组。int*p=malloc(sizeof(int));printf("*p=%p",*p);free(p);p=NULL;10静态区存储全局变量和静态变量。静态限定作用域全局变量可以是静态的,静态变量不一定是全局的。全局变量在main函数之前就已经存在。程序结束后,由操作系统统一回收。11文字常量区(只读数据段)存放字符串,程序结束后由操作系统释放。函数可以返回字符常量的地址,也可以返回堆区的地址,但不能返回局部变量的地址。进程内存布局示意图2021/8/512静态区(全局+static)文字区

5、(字符串)代码区(函数)堆(malloc,free)栈(调用函数)WindowsKernelShareSpace13习题求一个整型数组的所有元素之和对一个整型数组的元素序列进行反转。即对调a[i]与a[n-1-i]设计一个连接两个字符串的函数,例如s1="china";s2="people";连接后变成"chinapeople";14思考传指针的优缺点在同一个函数体内被调用的两个函数,它们的地址空间可能重叠吗?你能确定下面的组合定义吗?如:int(*p)();int*p();

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。