读书频道 > 系统 > 其他综合 > Objective-C 2.0 Mac和iOS开发实践指南
2.1 C程序的内存布局
2015-07-30 13:42:10     我来说两句 
收藏    我要投稿   
本书分为四部分。第一部分介绍学习Objective-C编程所需的C语言基础知识以及面向对象程序设计。第二部分介绍Objective-C编程的核心知识,包括消息机制、类和对象、类对象、动态链接库、Foundation类等。第三部分介  立即去当当网订购

要理解本章余下部分的内容,知道C程序在内存中的安排方式是有益的。图2.1显示了一个运行中的程序的虚拟地址空间的简化图。

虚拟地址空间是程序“看见”的地址空间。虚拟地址空间与实际物理地址之间的转换是由操作系统和计算机的内存管理单元(Memory Management Unit,MMU)不可见地处理的。

下面采用由低到高的顺序介绍虚拟地址:

文本段包含程序的可执行代码和只读数据。

数据段包含可读/写数据,包括全局变量。

堆包含根据请求分配给程序的内存块(参见2.6节)。当需要更多的内存时,系统可能会向上扩展堆。


 

栈用于调用函数。在调用一个函数时,系统将为被调用的函数构造一个栈帧(stack frame)。栈帧是在栈的底部(最低的地址)构建的内存区域。栈指针(指向栈的最低地址)向下移动。栈帧包含用于被调用函数的实参和局部变量的空间、保存需要在整个函数调用过程中保存的任何寄存器的值的空间,以及一些控制信息。当函数返回时,栈指针将恢复到它的前一个(较高的地址)值,并且控制权将返回给调用函数。关于这个过程要记住的重要一点是:在函数返回后,它的栈帧的内容将不再有效。

一些人喜欢把栈看做是向上扩展,类似于他们桌子上的一摞实际的纸张。他们把栈指针称为指向“栈的顶部”。无论你选择怎样考虑它,就内存地址而言,栈都是向下扩大的。调用一个函数将把栈指针移到较低的地址,从函数返回则将把它移回较高的地址。

点击复制链接 与好友分享!回本站首页
分享到: 更多
您对本文章有什么意见或着疑问吗?请到论坛讨论您的关注和建议是我们前行的参考和动力  
上一篇:概述
下一篇:2.2 自动变量
相关文章
图文推荐
2.7.12 使用仿真器查
2.7.11 栈和寄存器组
2.7.8 出栈
2.7.7 压栈
排行
热门
文章
下载
读书

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训
版权所有: 红黑联盟--致力于做最好的IT技术学习网站