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/

  • 相关阅读:
    八数码
    java swing打包为exe
    java swing 打为exe
    Intellij Idea开发: 手把手教你Java GUI开发,并且打包成可执行Jar程序
    HSSFworkbook,XSSFworkbook,SXSSFworkbook区别总结
    java poi修改EXCEL单元格的内容
    java 操作excel类型转换
    css截取过长文本,省略号显示
    idea swing 设置为utf8乱码
    Java使用POI读取和写入Excel指南
  • 原文地址:https://www.cnblogs.com/outs/p/7494236.html
Copyright © 2011-2022 走看看