下载此文档

c语言学习笔记(狼牙整理).doc


文档分类:文学/艺术/军事/历史 | 页数:约4页 举报非法文档有奖
1/4
下载提示
  • 1.该资料是网友上传的,本站提供全文预览,预览什么样,下载就什么样。
  • 2.下载该文档所得收入归上传者、原创者。
  • 3.下载的文档,不会出现我们的网址水印。
1/4 下载此文档
文档列表 文档介绍
一个应用程序的组成:bss, data, text, heap, stack
任何事物都是由比它更小的单位组成的,从物理学的角度来说就是什么原子(不知道现在对不对,学物理的尽管拍砖,哈哈), 一个汽车由4个轮子,发动机,底盘,车身,电气设备等组成,作为一个程序员应该知道一个程序有哪些部分组成的,不然......
1. text段, 就是代码段了,直观上看就是你码上去的东西,吧嗒吧嗒..... 因为你码上去编译之后就交给OS运行了,你不能在人家OS上运行中修改它吧,所以这个段是只读的
2. data段,data就是数据了,数据段, 顾名思义它里面存的是数据,这个数据是初始化的全局变量,初始化的用static修饰的变量也放在这里,会占用程序文本空间
int a[1024*1024] = {1};
void main (void)
{
printf("hello world\n");
}

3. bss段, bss: block started by symbol , 直译过来就是从符号开始的块, 它里面存储的是未初始化的全局变量,但不会占用程序文本空间
int a[1024*1024];
void main (void)
{
printf("hello world\n");
}

4. heap 堆,用malloc分配的内存就是它了,这个是在程序运行过程中动态分配的,所以不会占用程序文本空间
5. stack 栈,这里面存放的是临时变量,也就是你在函数中 int a; a就放在栈里,另外函数的形参也放在这里
1. 栈的整体作用
1) 保存现场;
2) 传递参数:汇编代码调用C函数时,需传递参数;
3) 保存临时变量:包括函数的非静态局部变量以及编译器自动生成的其他临时变量;
2. 详细解释
1) 保存现场
现场,意思就相当于案发现场,总有一些现场的情况,要记录下来的,否则被别人破坏掉之后,你就无法恢复现场了。而此处说的现场,就是指CPU运行的时候,用到了一些寄存器,比如r0,r1等等,对于这些寄存器的值,如果你不保存而直接跳转到子函数中去执行,那么很可能就被其破坏了,因为其函数执行也要用到这些寄存器。因此,在函数调用之前,应该将这些寄存器等现场,暂时保持起来(入栈push),等调用函数执行完毕返回后(出栈pop),再恢复现场。这样CPU就可以正确的继续执行了。保存寄存器的值,一般用的是push指令,将对应的某些寄存器的值,一个个放到栈中,把对应的值压入到栈里面,即所谓的压栈。然后待被调用的子函数执行完毕的时候,再调用pop,把栈中的一个个的值,赋值给对应的那些你刚开始压栈时用到的寄存器,把对应的值从栈中弹出去,即所谓的出栈。其中保存的寄存器中,也包括lr的值(因为用bl指令进行跳转的话,那么之前的PC的值是存在lr中的),然后在子程序执行完毕的时候,再把栈中的lr的值pop出来,赋值给PC,这样就实现了子函数的正确的返回。
2) 传递参数
C语言进行函数调用的时候,常常会传递给被调用的函数一些参数,对于这些C语言级

c语言学习笔记(狼牙整理) 来自淘豆网m.daumloan.com转载请标明出处.

相关文档 更多>>
非法内容举报中心
文档信息
  • 页数4
  • 收藏数0 收藏
  • 顶次数0
  • 上传人yunde116
  • 文件大小0 KB
  • 时间2015-08-22