内存空间管理
来源:互联网 发布:新站怎么做优化 编辑:程序博客网 时间:2024/05/08 06:06
操作系统在创建地址空间后,把程序的可执行文件加载到新创建的地址空间中。程序一般包括三种类型的段:.text .bss(block start by Symbol) .data.
内存空间如下所示:
.......↑
Shared libraries
....
.text
.bss
Heap (grows ↓)
Stack (grows ↑)
Env pointer
Argc
.........
↓
高地址(0XBFFFFFFFFF)
.text段是代码段。它用来放程序代码(code)。它通常是只读的(程序代码,编译好了就确定了,不可能改来改去的嘛)。
.data段是数据段。它用来存放初始化了的(initailized)全局变量(global)和初始化了的静态变量(static)。它是可读可写的。
.bss段是全局变量数据段。它用来存放未初始化的(uninitailized)全局变量(global)和未初始化的静态变量(static)。它也是可读可写的。bss是英文Block Started by Symbol的缩写。之所以把bss跟data分开来,是因为系统会为这些bss段的变量的初值清零。
.constdata段是常量数据段。它用来存放常量(const)。它也是只读的。
源程序中使用malloc分配的内存就是bss这一块,它的大小不是根据data的大小确定的,主要是由程序中同时分配内存最大值所确定的,不过如果超出了范围,也就是分配失败,可以等空间释放之后再分配。
以上这些段,用户可以非常灵活的定义其首地址和大小。但对大部分用户来说,程序代码区在ROM或FLASH中,可读写区域在SRAM或DRAM中。考虑一下自己程序规模,函数调用规模,内存使用大小,然后,参照一个连接定位文件,稍加修改就可以了
栈(stack)就是通常我们所说的堆栈。它用来保存函数的局部变量和参数。其操作方式类似于数据结构中的栈,是一种“后进先出”(Last In First Out,LIFO)的数据结构。这意味着最后放到栈上的数据,将会是第一个从栈上移走的数据,对于哪些暂时存储的信息,和不需要长时间保存的信息来说,LIFO这种数据结构非常理想。在调用函数或过程后,系统通常会清除栈上保存的局部变量、函数调用信息及其它信息。栈的顶部通常在可读写的RAM区的最后,其地址空间通常“向下减少”,即当栈上保存的数据越多,栈的地址就越小。
堆(heap)就是通常我们说的动态内存分配。它用来管理动态内存的。其操作方式跟数据结构中的堆,是不同的。
在ARM的集成开发环境中,
1、只读的代码段称为Code段,即上述的.text段。
2、只读的常量数据段,被称作RO Data段,即上述的.constdata段。
以上两个段统称为RO段(Read Only),放在ROM或FLASH等非易失性器件中。
3、可读可写的初始化了的全局变量和静态变量段,被称作RW Data段(ReadWrite),即上述的.data段。
4、可读可写的未初始化的全局变量和静态变量段,被称作ZI Data段(Zero Init),即上述的.bss段。因为这个段里的变量要被初始化为零,所以叫ZI段。
以上两个段统称为RW段,而在运行时,它必须重新装载到可读可写的RAM中。
- 内存空间管理
- JVM内存空间管理
- jvm内存管理 1 内存空间
- Linux内存空间以及内存管理
- 内存空间
- 内存空间
- 内存空间
- JAVA中堆内存空间管理问题探讨
- iPhone中管理malloc分配的内存空间
- 关于内存思考之一:有效管理内存空间
- 对linux内存空间管理的理解
- 虚拟内存管理-分配内存空间 VirtualAlloc使用
- nginx内存管理--大块内存空间申请 ngx_palloc_large
- alloc_page分配内存空间--Linux内存管理(十七)
- STL源码剖析——内存空间管理
- JVM执行Java程序的过程中管理的内存空间
- I/O空间、内存空间以及Linux内存管理
- JVM那些事儿之内存空间管理(三)
- awk 输出单引号的方法
- Android的线程使用来更新UI----Thread、Handler、Looper、TimerTask等
- C++要点摘录(二)C++中的引用
- AIX下安装db2数据库步骤 【好东西】
- scanf函数的使用
- 内存空间管理
- 进程调度、上下文切换
- 一口一口吃掉Hibernate(三)——Hibernate给表和字段设置前后缀及分隔符
- 代码行统计工具 SourceCounterCN简介
- 将Win32 C/C++应用程序迁移到Linux-进程、线程和共享内存
- 静态链接和动态链接
- 详谈 Jquery Ajax 异步处理Json数据
- 题目1518:反转链表
- 模式匹配算法-KMP算法