`

zz 代码段,数据段,堆栈段

 
阅读更多
zz from http://blog.sina.com.cn/s/blog_3cba7ec10100hh6p.html


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

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

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

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





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

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

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

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

向下增长



“空洞”       =======

向上增长


------          数据段
BSS
------
非零数据

=========低地址   =======

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

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

相关推荐

    数据结构重要代码(查找 堆栈 排序)

    本压缩包文件包含的是关于查找、堆栈和排序这三个关键领域的代码示例,它们在软件开发中具有极其重要的地位。 首先,我们来探讨查找技术。查找是数据处理的基本操作,其目的是在数据集合中寻找特定的元素。常见的...

    堆栈应用题 代码

    在IT领域,堆栈是一种非常基础且重要的数据结构,它遵循“后进先出”(LIFO)的原则。堆栈的应用广泛,特别是在处理撤销/重做功能时,它发挥着核心作用。本题要求设计一个堆栈类来实现撤销/重做的功能,这涉及到对...

    Linux内存管理进程所涉及到的五个数据段

    对任何一个普通进程来讲,它都会涉及到五种不同的数据段,这五种数据段分别是:代码段、数据段、BSS 段、堆(heap)和栈。 代码段 代码段是用来存放可执行文件的操作指令,也就是说它是可执行程序在内存中的镜像。...

    汇编小程序1

    写一个完整的程序放在代码段C_SEG中,要求把数据段D_SEG中的AUGEND和附加段E_SEG中的ADDEND相加,并把结果存放在D_SEG中的SUM中。其中AUGEND、ADDEND和SUM均为双精度数,AUGEND赋值为99251,ADDEND赋值为-15962。

    迷宫源代码 图形化显示堆栈变化 记录堆栈的变化

    通过阅读和分析这个源代码,我们可以看到如何使用堆栈数据结构,如何实现递归的DFS算法,以及如何将这些抽象概念转化为用户友好的图形和文字解释。 总的来说,这个项目提供了一个实用的学习工具,帮助IT从业者或...

    超实用的jquery代码段 源码

    《超实用的jQuery代码段》是由周敏编著的一部汇集了众多实用jQuery代码的资源集合,旨在帮助开发者提升在Web开发中的效率和效果。jQuery是一个强大的JavaScript库,它简化了HTML文档遍历、事件处理、动画制作以及...

    Basic4Android代码段

    代码段可能包括如何在Basic4Android中编写代码来启动GPS硬件并进行初始化。 4. 横竖屏切换:在Android开发中,当设备从竖屏模式切换到横屏模式时,可能会遇到内存溢出的问题。文件中提到的代码段可能提供了应对这种...

    数字转换为中文大写代码段

    这个代码段对于理解和学习堆栈数据结构、字符串处理和跨语言编程(英文数字到中文字符)等方面都有一定的教育价值。同时,通过阅读和调试 "test2.c",开发者可以更好地理解代码的工作原理,并确保在实际应用中能够...

    实验2堆栈模板.rar

    在“实验2堆栈模板.rar”中,包含的“stack”文件可能是实现堆栈操作的代码模板,比如C++、Java或其他编程语言的实现。通过学习这个模板,你可以理解如何创建和使用堆栈,包括初始化、压栈、弹栈等操作。这将帮助你...

    VC++2012编程演练数据结构《5》堆栈实现解析任意计算表达式

    在本实践项目中,我们将深入探讨如何利用VC++2012进行数据结构的学习和编程,特别是关于堆栈(Stack)这一重要的抽象数据类型在解析任意计算表达式中的应用。堆栈是一种后进先出(LIFO,Last In First Out)的数据...

    并行环境下搜索最大数函数代码段

    ### 并行环境下搜索最大数函数代码段 #### 背景与意义 在现代计算领域,随着数据量的急剧增长以及对计算速度要求的不断提高,并行计算技术得到了广泛的应用。并行计算能够通过利用多处理器或多核心的优势来显著...

    汇编语言详细代码

    总结而言,这段汇编代码主要展示了如何在汇编语言中进行基本的数据操作和控制流管理,包括数据段的定义、数据的读取和写入、循环结构的使用以及程序的终止。虽然没有直接涉及分治法排序的实现,但它为我们提供了一个...

    linux 堆栈溢出的问题

    3. **堆栈溢出原理**:当向一个有限大小的堆栈空间写入过多数据时,超出范围的数据会覆盖相邻的堆栈元素,包括返回地址。攻击者可以通过这种方式篡改返回地址,使其指向攻击者指定的代码,从而在函数返回时执行恶意...

    ASP.NET学习积累的代码段

    ASP.NET学习积累的代码段 ASP.NET学习积累的代码段: 购物车代码,分页,数据绑定,数据库方面,文件操作,显示投票的进度条代码 正则表达式大全等等74个不同的代码,不能一一罗列了。 下了就知道。

    《数据结构》堆栈操作:洗牌发牌,maze开发,链表实现,河内塔

    《数据结构》中的堆栈操作在信息技术领域中扮演着至关重要的角色,它是计算机科学中一种基本的数据结构,具有“后进先出”(LIFO,Last In First Out)的特性。堆栈通常用于处理需要回溯的操作,如函数调用、浏览器...

    C语言数据结构中的堆栈函数

    在实际应用中,为了提高代码的可读性和可维护性,我们可以将这些函数封装在一个堆栈模块(如`stack.h`和`stack.c`)中,使用头文件声明函数接口,而源文件实现具体的功能。例如,`stack.h`可以这样定义: ```c #...

    VC++2012编程演练数据结构《7》堆栈实现递归运算

    在本主题中,我们将深入探讨如何使用VC++2012进行编程,特别是关于数据结构中的堆栈(Stack)以及如何用堆栈来实现递归运算。堆栈是一种特殊的线性数据结构,遵循“后进先出”(Last In First Out, LIFO)原则,而...

    超实用的JavaScript代码段 (代码逆袭)》席新亮(作者)epub

    《超实用的JavaScript代码段》分为9章,包括JavaScript的一些必备知识,常用的表单处理、图片处理、内容展示、页面处理、日期处理、页面特效、移动开发等代码及其他常用代码,涉及闭包、Ajax、Data URI、DOM、BOM、...

    VC中打印当前调用堆栈信息实例

    调用堆栈,也称为运行时堆栈或函数调用栈,是程序执行过程中存储函数调用信息的数据结构。每次函数调用都会在堆栈上分配空间,保存返回地址、参数和局部变量等信息。当函数返回时,这些信息会被释放,以便为新的函数...

    数据结构与算法分析堆栈的操作二进制转换为其他进制

    数据结构与算法分析堆栈的操作二进制转换为其他进制

Global site tag (gtag.js) - Google Analytics