• 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.

2.

3.

4.

5.

6.

7.

参考文献:

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

Memory layout的更多相关文章

  1. Memory Layout for Multiple and Virtual Inheritance

    Memory Layout for Multiple and Virtual Inheritance(By Edsko de Vries, January 2006)Warning. This art ...

  2. Use Memory Layout from Target Dialog Scatter File

    参考 MDK-ARM Linker Scatter File的用法(转载) keil报错 Rebuild target 'Target 1' assembling test1.s... linking ...

  3. Kernel Memory Layout on ARM Linux

    这是内核自带的文档,讲解ARM芯片的内存是如何布局的!比较简单,对于初学者可以看一下!但要想深入理解Linux内存管理,建议还是找几本好书看看,如深入理解Linux虚拟内存,嵌入系统分析,Linux内 ...

  4. Memory Layout (Virtual address space of a C process)

    Memory Layout (Virtual address space of a C process) 分类: C语言基础2012-12-06 23:16 2174人阅读 评论(0) 收藏 举报 f ...

  5. Memory Layout of C Programs

    Memory Layout of C Programs   A typical memory representation of C program consists of following sec ...

  6. 【ARM-Linux开发】Linux内存管理:ARM Memory Layout以及mmu配置

    原文:Linux内存管理:ARM Memory Layout以及mmu配置 在内核进行page初始化以及mmu配置之前,首先需要知道整个memory map. 1. ARM Memory Layout ...

  7. Memory layout of x86_64 in Linux

    Blue : User Space 128TBRed : Kernel Space 512MBThe rest of the address space goes to various parts o ...

  8. C/C++ Memory Layout

    参考 http://www.cnblogs.com/skynet/archive/2011/03/07/1975479.html

  9. C Memory Layout C语言中的内存布局

    在C语言中,内存的主要分为下列几部分: 1. Text/Code Segment 文本/代码区 2. Initialized Data Segments 初始化的数据区 3. Uninitialize ...

随机推荐

  1. Oracle分页查询语句的写法

    分页查询是我们在使用数据库系统时经常要使用到的,下文对Oracle数据库系统中的分页查询语句作了详细的介绍,供您参考. AD:2013云计算架构师峰会精彩课程曝光 Oracle分页查询语句使我们最常用 ...

  2. blazor wasm访问非本地的restful service

    准备工作 blazor wasm正式版发布了!在尝试使用的过程中,发现几个小坑,跟大家分享一下,希望有所帮助. 我是通过keycloak来保护blazor和service的,如何保护service请参 ...

  3. Java操作XML(1)

    XML简介 XML(Extensible Markup Language)是一种非常有用的迷哦书结构化信息的技术.XML工具使处理和转化信息变得十分容易. 在程序中,可以使用属性文件(property ...

  4. Spring Boot 教程 (3) - RESTful

    Spring Boot 教程 - RESTful 1. RESTful风格 1.1 简介与特点 RESTful是一种网络应用程序的设计风格和开发方式,基于HTTP,可以使用XML格式定义或JSON格式 ...

  5. Docker 入门:什么是 Docker ?

    Docker 解决了软件环境部署复杂的问题. 对于一个传统的软件工程,开发人员把写好的代码放到服务器上去运行是一件很头疼的事情,因为常常会出现环境不兼容而导致各种各样的 Bug. 比如说,开发是在 w ...

  6. MyBatis中的命名空间namespace的作用

    1.定义mapper接口,面向接口编程. 2.在大型项目中,可能存在大量的SQL语句,这时候为每个SQL语句起一个唯一的标识(ID)就变得并不容易了.为了解决这个问题,在MyBatis中,可以为每个映 ...

  7. JVM调优总结(四)-分代垃圾回收详述

    为什么要分代 分代的垃圾回收策略,是基于这样一个事实:不同的对象的生命周期是不一样的.因此,不同生命周期的对象可以采取不同的收集方式,以便提高回收效率. 在Java程序运行的过程中,会产生大量的对象, ...

  8. 分布式项目开发-spring-dao.xml基础配置

    基础步骤: 1 数据源 2 sqlSessionFactory 3 MapperScan 打包. db.properties文件 db.username=root db.password=123456 ...

  9. 50个SQL语句(MySQL版) 问题九

    --------------------------表结构-------------------------- student(StuId,StuName,StuAge,StuSex) 学生表 tea ...

  10. 「MoreThanJava」一文了解二进制和CPU工作原理

    「MoreThanJava」 宣扬的是 「学习,不止 CODE」,本系列 Java 基础教程是自己在结合各方面的知识之后,对 Java 基础的一个总回顾,旨在 「帮助新朋友快速高质量的学习」. 当然 ...