2013年9月13日

一条进程的栈区、堆区、数据区和代码区在内存中的映射

摘要: 一条进程的栈区、堆区、数据区和代码区在内存中的映射 1>栈区:主要用来存放局部变量, 传递参数, 存放函数的返回地址。.esp 始终指向栈顶, 栈中的数据越多, esp的值越小。 2>堆区:用于存放动态分配的对象, 当你使用 malloc和new 等进行分配时,所得到的空间就在堆中。动态分配得到的内存区域附带有分配信息, 所以你 能够 free和delete它们。 3>数据区:全局,静态和常量是分配在数据区中的,数据区包括bss(未初始化数据区)和初始化数据区。注意: 1)堆向高内存地址生长; 2)栈向低内存地址生长; 3)堆和栈相向而生,堆和栈之间有个临界点,称为stkbr 阅读全文

posted @ 2013-09-13 17:00 屁屁侠 阅读(5051) 评论(0) 推荐(2) 编辑

加载时域和运行时域

摘要: 我们经常用到“存储地址和连接地址不同”(术语上称为加载时域和运行时域)的情况:大多机器上电时是从地址0开始运行的,但是从地址0运行程序在性能方面总有很多限制,所以一般在开始的时候,使用与位置无关的指令将程序本身复制到它的连接地址处,然后使用向pc寄存器赋值的方法跳到连接地址开始的内存上去执行剩下的代码。http://zqwt.012.blog.163.com/blog/static/120446842010113002939616/ 阅读全文

posted @ 2013-09-13 15:20 屁屁侠 阅读(6503) 评论(0) 推荐(0) 编辑

bss段和.data的是是非非

摘要: 一般情况下,一个程序本质上都是由 bss段、data段、text段三个组成的——本概念是当前的计算机程序设计中是很重要的一个基本概念。而且在嵌入式系统的设计中也非常重要,牵涉到嵌入式系统运行时的内存大小分配,存储单元占用空间大小的问题。在采用段式内存管理的架构中(比如intel的80x86系统),bss段(Block Started by Symbol segment)通常是指用来存放程序中未初始化的全局变量的一块内存区域,一般在初始化时bss 段部分将会清零(bss段属于静态内存分配,即程序一开始就将其清零了)。比如,在C语言程序编译完成之后,已初始化的全局变量保存在.data 段中,未初始 阅读全文

posted @ 2013-09-13 15:08 屁屁侠 阅读(445) 评论(0) 推荐(0) 编辑

导航