• 代码段、数据段、堆栈段、数据段


    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


    微信公众号: 猿人谷
    如果您认为阅读这篇博客让您有些收获,不妨点击一下右下角的【推荐】
    如果您希望与我交流互动,欢迎关注微信公众号
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接。

  • 相关阅读:
    DatePicker 日期选择器 split-panels 数组的时候,清空这个费劲啊,最后走的后门
    英语音标总结
    前台发布地址动态获取 本机地址
    SecureCRT windows 登录 linux
    The History of the English language 英语语音的起源
    iview 部分表单验证
    iView 表单验证 如果prop字段和表单里的字段对不上,会触发校验,提示错误信息
    hdu4370 0 or 1
    即时通讯上手必备知识点
    不使用Math.random实现随机数。
  • 原文地址:https://www.cnblogs.com/heyonggang/p/3045753.html
Copyright © 2020-2023  润新知