zoukankan      html  css  js  c++  java
  • Memory layout

    • Text Segment

          Text Segment,通常也被称为代码段。

          为了防止 heap 或是 stack 的溢出,text 段常被安排在 heap 或是 stack 之后。

          Text 段通常是sharable 的, 所以对于使用频次比较高的程序,在内存中一般只有一份拷贝。另外,Text 段也常常只是 read-only 的,其目的是防止其中存放的指令被意外的修改。

    • Initialized Data Segment

          Initialized Data Segment 通常被称作数据段,这里存放着在源代码中已经被初始化的全局变量和静态变量。

          需要注意的是,数据段并不一定是 read-only 的,因为这里存放的变量,它们的值在程序运行期间是可以修改的。

          例如:

          char s[] = “hello world”;

          int debug = 1;

          int main (void)

          {

              return 0;

          }

          其中的 s 和 debug 变量是存放在 read-write 数据区。

          再看一个例子:

          char * string = “hello world”

          其中的 “hello world” 是存放于 read-only 数据区的,而指针变量 string 则是存放于 read-write 数据区。

    • Uninitialized Data Segment

          Uninitialized Data Segment,通常被称为 bss 段, 其名称来源于早期的表示 block started by symbol 的汇编操作符。在程序开始运行之前,由内核将存放于此数据段的数据初始化为0.

          在程序中被初始化为 0 的、以及未给出明确初始值的全局变量和静态变量,被放置于此。

    • Stack

          Stack 被翻译为,其中的数据遵循后入先出(LIFO)原则。

          局部变量,发生函数调用时 cpu 通用寄存器的值,被存储于栈中。

    • Heap

          Heap 的中文名称为,程序员动态 malloc/free 申请与释放的内存,即位于堆中。

          下面通过 size(1) 命令对以上内容进行验证。

    1. 2017-09-06_16-04-20

    2. 2017-09-07_13-18-56

    3.2017-09-07_13-20-43

    4.2017-09-07_13-22-42

    5.2017-09-07_13-25-04

    6.2017-09-07_13-26-53

    7.2017-09-07_13-32-09

    参考文献:

    http://www.geeksforgeeks.org/memory-layout-of-c-program/

  • 相关阅读:
    jmeter上传和下载、webservice、数据库连接 -- 9
    jmeter cookies和token -- 8
    java 获得 微信 UserId
    让textarea根据文本的长度自动调整它的高度
    oracle 连接数据库并查询,返回List<Map<String, Object>> 数据
    POI 4.0 读取Excel
    excel (2)
    导出 doc
    sui Mobile 试玩
    oracle 与 前台 md5
  • 原文地址:https://www.cnblogs.com/outs/p/7494236.html
Copyright © 2011-2022 走看看