{C语言} 堆、栈与堆栈SP
来源:互联网 发布:北京python培训费用 编辑:程序博客网 时间:2024/05/18 00:31
堆栈:一个"后进先出"( LIFO )的主存区域,位于堆栈段中,使用SS段寄存器记录其段地址。它只有一个出入口,即当前栈顶,栈顶是地址较小 的一端(低端),它用堆栈指针寄存器SP指定。堆栈有两种以字为单位的基本操作,对应两条基本指令:进栈指令PUSH和出栈指令POP。
栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。也就是吃多了吐。比如函数调用时。
堆区(heap) — 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表。比如malloc函数
全局区(静态区)(static)— 全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域, 未初始化的全局变量和未初始化的静态变量在相邻的另一块区域。程序结束后由系统释放。
文字常量区 — 常量字符串就是放在这里的,程序结束后由系统释放 。
初始化数据段(.data)包含程序中明确定义的全局变量也静态变量。
非初始化数据段(.bss) 没有给出明确定义初值的全局变量和静态变量。
程序代码区(代码段)— 存放函数体的二进制代码。
队列:先进先出,吃多了拉。
虽然堆栈,堆栈的说法是连起来叫,但是他们还是有很大区别的,连着叫只是由于历史的原因.
其实如果要深入研究C语言的话,最好的就是通过查看编译后的汇编代码来查看其具体操作,当然这只是个人研究,如果想了解各种库函数的庆,你可以查询C语言函数库源码(很经典也很简洁....),如果快速的话就多看书了!
一般来说,编译器将内存分为三部分:静态存储区域、栈、堆。
静态存储区主要保存全局变量和静态变量,
栈存储调用函数相关的变量、地址等,
堆存储动态生成的变量,在c中是指由malloc,free运算产生释放的存储空间,在c++中就是指new和delete运算符作用的存储区域。
* C程序的存储布局-代码段(CPU执行指令的部分)、数据段和缓冲段、栈、堆
* 初始化数据段 .data 全局变量和静态变量(编译时就可确定大小)
* 非初初始化数据段 .bss 没有明确值的 全局变量和静态变量
* 栈(stack):自动变量、函数调用时的信息
* 堆(heap):用于存储用户申请的内存空间,小端处理器:栈由高地址向低地址缩减,堆由低地址向高地址增长
*/
- {C语言} 堆、栈与堆栈SP
- C语言堆和堆栈
- C语言及ARM中堆栈指针SP设置的理解与总结
- C语言堆栈——堆和栈的区别
- C语言中的堆与栈
- C语言堆栈入门——堆和栈的区别【顶嵌原创】
- C语言堆栈入门——堆和栈的区别
- C语言堆栈入门——堆和栈的区别【顶嵌原创】
- C语言堆栈入门——堆和栈的区别【顶嵌原创】
- C语言堆栈入门——堆和栈的区别
- C语言堆栈入门——堆和栈的区别
- C语言堆栈入门——堆和栈区别(转载)
- C语言堆栈入门——堆和栈的区别
- C语言堆栈入门——堆和栈的区别
- C语言堆栈入门——堆和栈的区别
- C语言堆栈入门——堆和栈的区别
- C语言堆栈入门——堆和栈的区别
- C语言堆栈入门——堆和栈的区别
- Android Google Map API 开发基础知识
- Android开发环境搭建及网络配置问题汇总
- 关于拷贝函数
- mysql备份方法
- java查找字符串中的包含子字符串的个数
- {C语言} 堆、栈与堆栈SP
- Hibernate映射类型
- 第二次C程序设计上机报告
- 利用ViewPager实现用户引导界面
- UITextView
- 黑马程序员 高新技术<一>---> eclipse开发工具、相关知识加强及枚举类
- Codeforces Beta Round #14 (Div. 2)
- JEECG学习笔记之初相识
- 怎样把java输出流输出到打印机上呢?3