RTEMS 操作系统的概念:堆与栈
来源:互联网 发布:淘宝联盟微信机器人 编辑:程序博客网 时间:2024/05/01 21:08
在计算机领域,堆栈是一个不容忽视的概念,只要编写程序都要用到。对于很多的初学着来说,堆栈却是一个很模糊的概念。
栈~(Stack)~在数据结构中是一种线性表,特点是先进后出~(First In Last Out,FILO)。数据结构/footnote{严蔚敏版《数据结构》}中出现堆~(heap)~的地方只有
堆排序算法。程序员口中的堆栈是存储代码中数据的方式方法,栈和数据结构中的“栈”是有些联系的,但堆和数据结构中的“堆”基本上是无任何关系的。
称呼上堆栈不分家,但实际上堆和栈的区别是非常大的。栈和数据结构中先进后出的线性表非常类似,在代码中主要完成存储局部变量、函数的调用参数和返回地址等,
也称为调用栈。以~ARM~上的~C~语言的调用栈为例:
进入函数后,编译器自动将本函数使用到的寄存器和返回地址压栈保护。
函数的局部变量s只有~4~个字节,直接使用寄存器
保存;buf~变量有~120~字节,寄存器放不下了,栈顶指针还得
向下移动~120~个字节。当~func~函数返回时,系统自动回收空间,
栈顶指针向上移动,释放~buf~所占的空间、保护的通用寄存器和函数的返回地址所占空间。
调用~sort~函数时,sort~内部又在栈中申请空间,返回~func~时,系统自动回收这些空间。
申请回收的过程类似线性表中的先进后出的栈结构,这个过程又发生在函数调用时,故称为调用栈。
另外,这个函数的~array~和~n~参数及其返回值不保存在栈中。这个问题针对不同的平台是不一样的。对于~ARM,第一个
函数的参数放在寄存器~R0~中,第二个放在寄存器~R1~中,超过一定的数量后(具体视编译器而定,一般是~4~个参数),参数也会放入栈中。
函数返回值是通过~R0~返回的。%更复杂一些,C++~带有异常抛出的函数,抛出异常也是由栈保存的。
堆是被动态管理的内存,可以在程序中自由分配,分配成用户想要的尺寸的内存,使用完毕后需要手工释放该内存。
在~C~语言中,程序员可以使用~malloc~等函数向堆申请任意大小的内存;使用完成后,使用~free~释放
该内存,否则会引起内存泄漏,影响系统的效率。这里需要注意,堆的分配回收算法是多种多样的,不同系统实现堆的方式可能差别很大,
不同算法的效率也是不一样的。但栈实现方式基本上是一致的,无非是栈的增长方向可能不同,大都是向下增长的,也有些是向上增长的。
对程序员来说,栈空间的申请和释放是透明的,即系统自动完成这一切的工作;而堆的使用,程序员必须手工的申请、释放,不是自动完成的。
- RTEMS 操作系统的概念:堆与栈
- RTEMS 操作系统的概念:任务
- RTEMS 操作系统的概念:实时操作系统
- RTEMS操作系统概念:字节对齐
- RTEMS 的堆(上)
- RTEMS 的堆(下)
- 操作系统中栈与堆的理解
- 操作系统意义上的堆和栈的概念以及数据结构意义上的堆和栈的概念
- 操作系统意义上的堆和栈的概念以及数据结构意义上的堆和栈的概念
- 栈、堆的概念
- 被遗忘的嵌入式实时操作系统RTEMS
- java堆与栈内存概念的个人理解
- 堆和栈的概念
- 堆和栈的概念
- 堆和栈的概念
- 堆和栈的概念
- js的栈堆概念
- 堆的相关概念与实现
- web编程之html篇(框架)
- /LGC物理引擎/彻底解放CPU的物理卡深入剖析
- /LGC物理引擎/Android port of Box2d
- SELECT INTO 和 INSERT INTO SELECT 两种表复制语句
- /LGC物理引擎/在 Eclispe 中编译运行 jbox2d
- RTEMS 操作系统的概念:堆与栈
- C# 子线程访问主窗体控件(转载)
- RTEMS 操作系统的概念:任务
- qdockwidget 去掉標題欄
- PowerShell 2.0之使用WMI管理Windows(三)获取软硬件信息
- RTEMS操作系统概念:字节对齐
- Version 1.4.2_03 of the JVM not suitable for this product.Version1.5 or geeater is required
- ubuntu10.10 和win7双系统 ,进不了系统 ,grub失效
- RTEMS 文件系统(1):路径评估