C语言初始化——栈的初始化
栈是一种具有后进先出性质的数据组织方式,也就是说后存放的先取出,先存放的后取出。栈底是第一个进栈的数据所处的位置,栈顶是最后一个进栈的数据所处的位置。
1.满栈与空栈
根据SP指针指向的位置,栈可以分为满栈和空栈
满栈:当堆栈指针SP总是指向最后压入堆栈的数据。

空栈:当堆栈指针SP总是指向下一个将要放入数据的空位置。

2.升栈和降栈
根据SP指针移动的方向,栈可以分为升栈和降栈。
升栈:随着数据的入栈,SP指针从低地址->高地址移动。
降栈:随着数据的入栈,SP指针从高地址->低地址移动
ARM采用的是满降栈
3.栈帧
就是一个函数所使用的那部分栈,所有函数的栈帧串起来就组成了一个完整的栈。
栈帧的两个边界分别由fp(r11)和sp(r13)来限定。

4.栈的作用
4.1 保存局部变量
#include <stdio.h> int main()
{
int a; a++; return a;
}
stack1.c
arm-linux-gcc -g stack1.c -o stack1
arm-linux-objdump -D -S stack1 >dump
vim dump
4.2 参数传递
#include <stdio.h> void func1(int a,int b,int c,int d,int e,int f)
{
int k;
k=e+f;
} int main()
{
func1(,,,,,);
return ;
}
stack2.c
同上,可查看!
4.3 保存寄存器的值
#include <stdio.h> void func2(int a,int b)
{
int k;
k=a+b;
} void func1(int a,int b)
{
int c;
func2(,);
c=a+b;
} int main()
{
func1(,);
return ;
}
stack3.c
同上,可查看!
5.栈的初始化
init_stack:
ldr sp,=0x54000000
mov pc,lr
init_stack
6410内存的起始地址:0x50000000,内存大小设为64MB
C语言初始化——栈的初始化的更多相关文章
- c语言将2进制数转化为10进制数(栈的初始化,进栈,出栈)
//c语言描述 将2进制转化为10进制 #include <stdio.h> #include <stdlib.h> #include <math.h> #defi ...
- c++描述将一个2进制数转化成10进制数(用到初始化栈,进栈,入栈)
/* c++描述将2进制数转化成10进制数 问题,1.初始化栈后,用new,不知道delete是否要再写一个函数释放内存, 还是在哪里可以加上delete 2.如果栈满了,我要分配多点空间,我想的办法 ...
- Go语言goroutine调度器初始化(12)
本文是<Go语言调度器源代码情景分析>系列的第12篇,也是第二章的第2小节. 本章将以下面这个简单的Hello World程序为例,通过跟踪其从启动到退出这一完整的运行流程来分析Go语言调 ...
- C语言标记化结构初始化语法
C语言标记化结构初始化语法 (designated initializer),而且还是一个ISO标准. #include <stdio.h> #include <stdlib.h&g ...
- C语言数组空间的初始化详解
数组空间的初始化就是为每一个标签地址赋值.按照标签逐一处理.如果我们需要为每一个内存赋值,假如有一个int a[100];我们就需要用下标为100个int类型的空间赋值.这样的工作量是非常大的,我们就 ...
- Swift5 语言指南(十六) 初始化
初始化是准备要使用的类,结构或枚举的实例的过程.此过程涉及为该实例上的每个存储属性设置初始值,并执行在新实例准备好使用之前所需的任何其他设置或初始化. 您可以通过定义实现这个初始化过程初始化,这就像特 ...
- C语言顺序栈实现
/*数序栈*/ #include<stdio.h> #include<stdlib.h> #include<math.h> #define SElemType ch ...
- C语言描述栈的实现及操作(链表实现)
#include<stdio.h> #include<malloc.h> #include<stdlib.h> typedef int Elementtype; / ...
- 【原创】c++拷贝初始化和直接初始化的底层区别
说明:如果看不懂的童鞋,可以直接跳到最后看总结,再回头看上文内容,如有不对,请指出~ 环境:visual studio 2013(编译器优化关闭) 源代码 下面的源代码修改自http://blog.c ...
随机推荐
- SharePoint 2016 Beta 2 安装体验
博客地址:http://blog.csdn.net/FoxDave 最近忙碌了一段时间,2016正式版快要发布了,想尽快熟悉熟悉.2016不再提供免费版Foundation的支持,只有Server版本 ...
- Android刷新Dialog
在编写数独游戏时遇到一个问题,当我一次游戏成功后会弹出一个dialog,告诉玩家当前的游戏难度,积分和所用时间,我在onCreateDialog中setMessage之后发现内容一直是不变的,后来找到 ...
- Qt控件篇 ---- QTableView/QTableWidget
记录 //按字母排序 item->setText("2"); //按数值排序item->setData(Qt::DisplayRole, 2);
- JS 点击复制Copy (share)
分享自:http://www.cnblogs.com/athens/archive/2013/01/16/2862981.html 1.实现点击按钮,复制文本框中的的内容 1 <script t ...
- cocos2d 艺术标签没有显示
今天自己挖了个坑,设置数字标签的时候,无论怎么搞,程序运行后还是显示的是普通文本数字,各种原因找了一半天,最后发现在资源名字.png的前面多了一个空格,眼瞎一直没看到,最后去掉就OK了
- Oracle创建、删除表空间、用户
1.创建临时表空间 create temporary tablespace linshi tempfile 'e:\linshi.dbf' size 50m autoextend on next 50 ...
- hiho一下121周 后缀数组二·重复旋律2
后缀数组二·重复旋律2 时间限制:5000ms 单点时限:1000ms 内存限制:256MB 描述 小Hi平时的一大兴趣爱好就是演奏钢琴.我们知道一个音乐旋律被表示为长度为 N 的数构成的数列.小Hi ...
- AndroidStudio 中的坑Error:(1, 0) Plugin is too old, please update to a more recent version, or set ANDROID_DAILY_OVERRID
将 build.gradle 中 的 classpath改为2.0.+ dependencies { classpath 'com.android.tools.build:gradle:2.0.+'然 ...
- 我的STL之旅 MyStack
#include<iostream> #include<cstdio> #include<cstring> #include<algorithm> us ...
- 通过前台选择输入用来计算圆,三角形以及长方形的面积(此题目主要是while以及if 的使用)
#!/bin/usr/env python#coding=utf-8'''完成一段简单的Python程序,用于实现计算圆面积,三角形面积,长方形面积'''flag=Truewhile flag: pi ...