常常两两相对的东西,整一起后有点记不住,就写下来。

cpu.h中有宏定义使用哪种栈。

#define  OS_STK_GROWTH   1    /* Stack grows from HIGH to LOW memory on ARM   */

栈的四种

满栈:"满"字表示栈是满的,没有空位,所以栈指针指向栈的最后一个元素。我们入栈时要先移动SP再存数据,出栈时先取数据SP指针再移动。

空栈:"空"字表示栈是有个空位的。所以栈指针指向栈的最一个元素后面的第一个空位。我们入栈时直接存入数据,再移动SP。出栈时,先移动SP再取出数据。

増栈:"増"字表示往地址较大的方向。所以,栈底在低内存地址处,入栈时候的栈指针SP向内存地址较大的方向移动。

减栈:"减"字即减小,表示往地址较小方向。栈底在高内存地址处,入栈时指针SP向内存底子较小的方向移动。

表格表示:

类型 SP指针 存数据 取数据
满栈 SP指向满栈(最后一个元素) 先移动再存放 直接取数据后移动
空栈 SP指向空位(最后元素的后一个空位) 直接存放后移动 先移动再取
类型 栈底 栈指针移动方向
増栈 低内存地址 栈指针移动方向为地址增加方向
减栈 高内存地址 栈指针移动方向为地址减小方向

在ARM中一般为满减栈

cpu.h-栈的宏定义-满减栈相关推荐

  1. signal.h 中的宏定义 SIG_DFL 及 SIG_IGN

    SIG_DFL.SIG_IGN 分别表示无返回值的函数指针,指针值分别是 0 和 1 .这两个指针值逻辑上讲是实际程序中不可能出现的函数地址值. SIG_DFL:默认信号处理程序 SIG_IGN:忽略 ...

  2. 【C 语言】编译过程 分析 ( 预处理 | 编译 | 汇编 | 链接 | 宏定义 | 条件编译 | 编译器指示字 )

    相关文章链接 : 1.[嵌入式开发]C语言 指针数组 多维数组 2.[嵌入式开发]C语言 命令行参数 函数指针 gdb调试 3.[嵌入式开发]C语言 结构体相关 的 函数 指针 数组 4.[嵌入式开发 ...

  3. 宏定义是写在.h文件里还是.c文件里

    宏定义是写在.h文件里还是.c文件里? 1.不管是定义在.h文件还会.c文件,程序都会正常运行. 2.如果.h中不需要用到的宏,都定义到.c里,因为等一个工程里需要include多个.h的时候,你在. ...

  4. C语言编程宏定义的优缺点,C语言重要知识点总结(二)--内存结构、函数调用过程(栈帧)、宏的优缺点以及##和#的使用...

    一.内存结构 内存大致可以分为四个部分:代码段,静态存储区,堆,栈. 具体划分如下图所示: 栈:在执行函数时,函数内部局部变量的存储单元都可以在栈上创建,函数执行结束后会自动释放内存.栈内存的分配运算 ...

  5. 6、宏定义与预处理、函数与函数库

    C语言预处理理论 由源码到可执行程序的过程 源码.c->(编译)->elf可执行程序 源码.c->(编译)->目标文件.o->(链接)->elf可执行程序 源码.c ...

  6. Linux宏定义实现类成员函数,全面解析Linux内核的同步与互斥机制

    http://blog.csdn.net/sailor_8318/archive/2008/06/30/2599357.aspx [摘 要]本文分析了内核的同步及互斥的几种机制:原子运算符(atomi ...

  7. C中的预编译宏定义-转

    C中的预编译宏定义 2009-02-10 作者: infobillows 来源:网络 在将一个C源程序转换为可执行程序的过程中, 编译预处理是最初的步骤. 这一步骤是由预处理器(preprocesso ...

  8. C语言基础知识之define宏定义表达式,undef,内存对齐,a和a的区别,数组知识点,int (*)[10] p,二维数组参数与二维指针参数,函数指针数组,常见的内存错误及对策

    一.用define宏定义表达式 1.定义一年有多少秒: #define SEC_A_YEAR 60*60*24*365 //上述描述不可靠,没有考虑到在16位系统下把这样一个数赋给整型变量的时候可能会 ...

  9. c语言如何增加编译宏,C中的预编译宏定义

    在将一个C源程序转换为可执行程序的过程中, 编译预处理是最初的步骤. 这一步骤是由预处理器(preprocessor)来完成的. 在源流程序被编译器处理之前, 预处理器首先对源程序中的"宏( ...

最新文章

  1. c++ocx交互检测弹框_吉利几何C:2022杭州亚运会移动“明信片”!
  2. Tomcat - Tomcat 8.5.55 启动过程源码分析阶段二_load加载初始化
  3. python随机数种子通俗_随机数种子random.seed()理解
  4. leetcode1509. 三次操作后最大值与最小值的最小差
  5. 威纶触摸屏与电脑连接_威纶通触摸屏和西门子PLC通讯不上解决方法
  6. 大麦盒子DM1004线刷降级填坑记录
  7. 如何理解DeepFool算法
  8. 遥感数据集的下载记录——MODIS产品为主
  9. 图像增强(拉普拉斯锐化增强)
  10. 本地用户和组 无法访问计算机 无效的语法,找不到Windows NT用户或组“DOMAIN \ USER”?...
  11. 【异常检测第一篇】DeepLog: Anomaly Detection and Diagnosis from System Logs through Deep Learning
  12. bzoj 瞭望塔1038
  13. 《中国哲学史大纲》读书笔记
  14. 腾讯Bugly 集成( Android SDK)
  15. hasp运行不成功_HASP加密锁错误代码原因
  16. Web实现文件上传和下载
  17. 《设计模式》.pdf
  18. django单服务部署
  19. 湖南师范大学计算机科学与技术学科评估,全国大学学科评估结果出炉 湖南这些高校入围...
  20. 百度云管家开机启动如何取消

热门文章

  1. 【音频】削波失真(爆音)问题定位与解决
  2. BAT公司职级体系及薪水解密
  3. 「Hortic Res」APETALA2的同源物CaFFN可调节辣椒的开花时间
  4. 延禧攻略插曲6首歌词+简谱
  5. 关于Jetson TX2刷机各种问题(刷机后键盘等等奇葩错误)
  6. 开屏展示图的优化与理解
  7. SQL Server连接本地数据库时系统找不到指定文件
  8. Windows常用操作—热键(快捷键)
  9. canvas轨迹运动, 利用向量实现点匀速运动
  10. linux 系统速度慢,Linux运维人员你知道Linux系统运行速度太慢的原因吗?