栈初始化

为何C语言须要栈linux

1.概念解析编程

      1.1 栈函数

         (1)栈后进先出指针

             栈顶blog

             SP进程

             栈底变量

      1.2 空/满栈gcc

             SP指向的地址已经被占了,是满栈gc

             SP指向的位置是空的,叫空栈程序

             ARM使用的是满栈

      1.3 升/降栈

            移动的方向来肯定是升栈仍是降栈

             从 低向高 叫升栈

            从高到低 叫降栈

         ARM 采用降栈

       1.4 栈帧(stack frame)

                一个进程会用到一个栈

                一个函数会分割栈区域的一个地方,这个地方就叫作栈帧

              如何来界定栈帧之间的边界

               上边界 由 FP指针  R11寄存器

               下边界 由 SP指针 R13 寄存器

        C语言中 main 函数的上边界 和下边界在哪里呢?

               答:被它所调用的函数的 栈帧里面的 SP 和 FP变量

        

2.栈做用(栈在C语言中的应用)

     2.1 保存局部变量

               arm-linux-gcc  -g  stack.c -o stack

               arm-linux-objdump -D -S stack  > dump

               查看 dump文件理解 C语言局部变量

               

 

     2.2 参数传递

       main->func1(1,2,3,4,5,6) 前4个用寄存器保存,后面的用栈保存

     2.3 保存寄存器值

main-> func1-> func2

3.栈初始化编程

统一把 SP指针放到 64M位置

2440 是 256M  0x3000000 + 64M = 0x34000000

 

 

初始化 bss 段

1.bss段的做用

初始化的全局变量 存放在 数据段

局部变量 /未初始化的局部变量 存储在 栈里面

未初始化的  全局变量 (两个条件必须都知足)  存放在bss段里面

但愿从bss段里面的取的值都是0,这样不至于程序中出现为初始化的全局变量为 异常值

相关文章
相关标签/搜索