内存各个区域的区别
来源:互联网 发布:制作精品课程网站软件 编辑:程序博客网 时间:2024/04/28 06:21
一般情况下,一个可执行二进制程序(更确切的说,在Linux操作系统下为一个进程单元,在UC/OSII中被称为任务)在存储(没有调入到内存运行)时拥有3个部分,分别是代码段(text)、数据段(data)和BSS段。这3个部分一起组成了该可执行程序的文件。
(1)代码段(text segment):存放CPU执行的机器指令。通常代码段是可共享的,这使得需要频繁被执行的程序只需要在内存中拥有一份拷贝即可。代码段也通常是只读的,这样可以防止其他程序意外地修改其指令。另外,代码段还规划了局部数据所申请的内存空间信息。
代码段(code segment/text segment)通常是指用来存放程序执行代码的一块内存区域。这部分区域的大小在程序运行前就已经确定,并且内存区域通常属于只读, 某些架构也允许代码段为可写,即允许修改程序。在代码段中,也有可能包含一些只读的常数变量,例如字符串常量等。
(2)数据段(data segment):或称全局初始化数据段/静态数据段(initialized data segment/data segment)。该段包含了在程序中明确被初始化的全局变量、静态变量(包括全局静态变量和局部静态变量)和常量数据。
(3)未初始化数据段:亦称BSS(Block Started by Symbol)。该段存入的是全局未初始化变量、静态未初始化变量。
而当程序被加载到内存单元时,则需要另外两个域:堆域和栈域。
(4)栈(stack):存放函数的参数值、局部变量的值,以及在进行任务切换时存放当前任务的上下文内容。
(5)堆(heap):用于动态内存分配,即使用malloc/free系列函数来管理的内存空间。
在将应用程序加载到内存空间执行时,操作系统负责代码段、数据段和BSS段的加载,并将在内存中为这些段分配空间。栈也由操作系统分配和管理,而不需要程序员显示地管理;堆由程序员自己管理,即显示地申请和释放空间。
- 内存各个区域的区别
- java虚拟机内存的各个区域以及各个区域的作用
- 各个内存分配函数的区别
- 内存区域,堆栈区别
- C 语言内存区域分配(进程的各个段)详解
- 深入C语言内存区域分配(进程的各个段)详解
- 特殊的内存区域
- Java的内存区域
- 程序的内存区域
- java的内存区域
- 内存的数据区域
- JVM的内存区域
- 内存区域的划分
- JVM的内存区域
- java内存区域-堆栈总结、区别
- 程序的内存区域划分
- 内存存储区域的讨论
- 内存存储区域的讨论
- ARC下的单例模式
- Intent中的四个重要属性——Action、Data、Category、Extras
- No3 导航控制器
- C#操作Word总结(三)——表格处理、把Word文档转化成为HTML
- ubuntu 技巧
- 内存各个区域的区别
- Feedforward Deep Networks(要点)
- java中wait/notify机制
- CentOs7修改密码
- python核心编程 习题7-10
- ios-Label中显示多种样式的字体
- Scala---文件读取、写入、控制台操作
- abstract class和interface的区别
- 利用WMI打造完美三无后门(scrcons.exe)