代码段、数据段、堆栈段、数据段辨析

1、高位地址:栈(存放着局部变量和函数参数等数据),向下生长   (可读可写可执行)

2、           堆(给动态分配内存是使用),向上生长             (可读可写可执行)

3、           数据段(保存全局数据和静态数据)                    (可读可写不可执行)

4、地位地址:代码段(保存代码)                                (可读可执行不可写)

代码段就是存储程序文本的,所以有时候也叫做文本段,指令指针中的指令就是从这里取得。这个段一般是可以被共享的,比如你在Linux开了2个Vi来编辑文本,那么一般来说这两个Vi是共享一个代码段的,但是数据段不同(这点有点类似C++中类的不同对象共享相同成员函数)。

数据段是存储数据用的,还可以分成初始化为非零的数据区,BSS,和堆(Heap)三个区域。初始化非零数据区域一般存放静态非零数据和全局的非零数据。BSS是Block Started by Symbol的缩写,原本是汇编语言中的术语。该区域主要存放未初始化的全局数据和静态数据。还有就是堆了,这个区域是给动态分配内存是使用的,也就是用malloc等函数分配的内存就是在这个区域里的。它的地址是向上增长的。

最后一个堆栈段(注意,堆栈是Stack,堆是Heap,不是同一个东西),堆栈可太重要了,这里存放着局部变量和函数参数等数据。例如递归算法就是靠栈实现的。栈的地址是向下增长的。具体如下:

========高地址   =======
程序栈        堆栈段

向下增长

“空洞”       =======

向上增长


------          数据段
BSS
------
非零数据
=========低地址   =======

=========       =======
代码           代码段
=========       =======

需要注意的是,代码段和数据段之间有明确的分隔,但是数据段和堆栈段之间没有,而且栈是向下增长,堆是向上增长的,因此理论上来说堆和栈会“增长到一起”,但是操作系统会防止这样的错误发生,所以不用过分担心。

摘自http://www.cnblogs.com/qlee/archive/2011/09/07/2169831.html

代码段、数据段、堆栈段、数据段辨析

时间: 2024-11-05 13:27:14

代码段、数据段、堆栈段、数据段辨析的相关文章

[转]kafka要等一段时间才能消费到数据

kafka要等一段时间才能消费到数据  pythonkafka 为什么用python写的kafka客户端脚本,程序一运行就能生产数据,而要等一段时间才能消费到数据(topic里面有数据).(pykafka和confluentKafka都一样) 只有极少的概率立刻可以消费到数据,大多数都要等个几分钟,很影响测试效率. 自己封装的一个给予confluentKafka的consumer对象 调用,topic里面是有内容的等一段时间也是可以消费到数据的 阅读 4.8k 赞 1踩 收藏关注 6 评论 更新

oracle使用还原段的目的和还原数据的管理方法及还原段的类型

一.引入还原段主要有3个目的: 1.事务回滚:主要是针对rollback语句起作用 2.事务恢复:非正常关闭数据库即非保留事务级关闭数据库(abort.immediate)或者数据库instance崩溃,则当数据库再次打开时oracle服务器就要还原所有没有提及的事务.这种还原就是事务恢复的一部分.要使得恢复真正的成为可能写到还原段的变化也要受到联机重做日志的保护. 3.保证数据的读一致性. 二.还原数据的管理方法 1.自动的还原数据管理:oracle服务器自动的管理还原段的创建.分配和优化 2

判断一个字符串里是否含有某段字符?怎么截取一段字符?

写前端过程中遇到的最多的字符串操作莫过于 :判断一个字符串里是否含有某段字符 ,和 截取一段字符串. 字符串操作有很多方法,其实一般只要掌握以上两个就够用了,其他方法随他去吧,好,下面就以上两个方法讲解一下. 1.判断一个字符串是否含有某段字符,使用indexOf()方法: str.indexOf("参数1","参数2");参数1表示判断是否包含的小字符串, 参数2表示从左到有依次判断的起始位置,默认从0开始,str表示用于寻找的原字符串,ps:如果原字符串含多个判

ObjectARX2010 学习笔记004:复制多段线点生成新多段线

static void swtArxProject5plcopy(void) { // Add your code for command swtArxProject5.plcopy here //定义对象名和点 ads_name ename;ads_point pt; //如果没有选择到实体 if(acedEntSel(NULL,ename,pt)!=RTNORM) { return; } //定义并获取ID AcDbObjectId id; acdbGetObjectId(id,ename)

鼠标悬停(鼠标悬停一段时间后触发事件)一段时间后触发事件

<html> <head> <meta http-equiv="content-type" content="text/html; charset=UTF-8"> <script type="text/javascript"> var mytimer = null; function beginEvent(){ //window.setTimeout("alert('Hello, worl

[转帖]财务自由分9段,你在第几段?

财务自由分9段,你在第几段? http://www.sohu.com/a/191481099_596832 现在买菜还心疼价钱呢.. 没有自由. 理财是为了实现财务自由,但财务自由到底是什么呢?是不用为了钱忧虑?还是内心与生活的富足? 我们身边的大多人,都过着朝九晚六的上班生活,突然来个临时情况需要请假,都会仔细衡量它值不值得拿一天薪水来换. 为什么会出现这样的情况?这与我们所处的财务阶段有很大关系.网上有人借鉴围棋的段位给财务自由搞了个九段标准: 初段:菜场自由 在菜场只要自己愿意买哪种菜就买

code first网站发布后数据表中没有数据问题

code first网站发布后数据表中没有数据问题 (1).将internal sealed class Configuration类访问修饰符改为public  class Configuration : DbMigrationsConfiguration<SimpleNews.EntityModels.SimpleNewsContext> (2).在Global文件的Start()方法中加入下面一段代码 Database.SetInitializer( new MigrateDatabas

Android 网络请求json数据,解析json数据,生成对应的java bean类一步到位,快速开发

Android 网络请求一般都涉及到图片和JSON数据,怎样快速的请求网络JSON数据,解析JSON数据,并且一步生成自己想要的Java bean实体类?这个涉及到Android 开发效率的问题.由于接触Android 网络这方面比较多,自然就找到一些好的方法来快速开发Android 网络模块的相关内容,接下来就为大家揭晓 一步快速请求,解析JSON 数据生成对应的Java bean实体类的方法. 注:我们先把思路讲解下吧: 1.网络请求JSON数据代码可以自己写,当然我还是推荐使用网络上开源的

使用聚合数据API查询快递数据-短信验证码-企业核名

有位朋友让我给他新开的网站帮忙做几个小功能,如下: 输入快递公司.快递单号,查询出这个快件的所有动态(从哪里出发,到了哪里) 在注册.登录等场景下的手机验证码(要求有一定的防刷策略) 通过输入公司名的关键词,查看这个公司是否已经注册.法人信息.有类似名称的公司等等 并且可以用的接口.文档都提供给我了.其中需求 1.2,都通过 聚合数据 这家网站提供的接口实现:需求 3 通过 云聚数据 来实现. 本项目的文件 因为朋友的网站是用 ThinkPHP 写的,为了保持将来代码的兼容,这三个功能也用 Th

大数据理论体系总结--数据仓库管理与全链路数据体系

前言 就这样,大数据领域蓬勃发展了好几年,有很多伙伴执迷于技术,成为了分布式计算与存储的领域专家.也有很多伙伴执迷于数据,成为了行业的数据研发专家.当然还有很多小伙伴,热衷于工具系统开发,成为了数据技术专家.那么我们回过头来考虑,什么是大数据,什么又是数据仓库,什么又是数据技术.大数据其实是个非常笼统的感念,它是由数据仓库演化而来的数据与技术方法论,那么我们先说一下数据仓库的由来: 早在多年以前在Hadoop.Spark.Storm.Kafka等系列分布式计算与存储.消息中间件还没有成熟的时候,