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. 
2. 
3.
4.
5.
6.
7.
参考文献:
http://www.geeksforgeeks.org/memory-layout-of-c-program/
Memory layout的更多相关文章
- Memory Layout for Multiple and Virtual Inheritance
Memory Layout for Multiple and Virtual Inheritance(By Edsko de Vries, January 2006)Warning. This art ...
- Use Memory Layout from Target Dialog Scatter File
参考 MDK-ARM Linker Scatter File的用法(转载) keil报错 Rebuild target 'Target 1' assembling test1.s... linking ...
- Kernel Memory Layout on ARM Linux
这是内核自带的文档,讲解ARM芯片的内存是如何布局的!比较简单,对于初学者可以看一下!但要想深入理解Linux内存管理,建议还是找几本好书看看,如深入理解Linux虚拟内存,嵌入系统分析,Linux内 ...
- 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 ...
- Memory Layout of C Programs
Memory Layout of C Programs A typical memory representation of C program consists of following sec ...
- 【ARM-Linux开发】Linux内存管理:ARM Memory Layout以及mmu配置
原文:Linux内存管理:ARM Memory Layout以及mmu配置 在内核进行page初始化以及mmu配置之前,首先需要知道整个memory map. 1. ARM Memory Layout ...
- Memory layout of x86_64 in Linux
Blue : User Space 128TBRed : Kernel Space 512MBThe rest of the address space goes to various parts o ...
- C/C++ Memory Layout
参考 http://www.cnblogs.com/skynet/archive/2011/03/07/1975479.html
- C Memory Layout C语言中的内存布局
在C语言中,内存的主要分为下列几部分: 1. Text/Code Segment 文本/代码区 2. Initialized Data Segments 初始化的数据区 3. Uninitialize ...
随机推荐
- Educational Codeforces Round 56 (Rated for Div. 2) F. Vasya and Array
题意:长度为n的数组,数组中的每个元素的取值在1-k的范围内或者是-1,-1代表这个元素要自己选择一个1-k的数字去填写,然后要求填完的数组中不能出现连续长度大于len的情况,询问填空的方案数. 题解 ...
- BZOJ 1070 拆点 费用流
1070: [SCOI2007]修车 Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 5860 Solved: 2487[Submit][Status] ...
- CF948B Primal Sport
题目链接:http://codeforces.com/contest/948/problem/B 知识点: 素数 解题思路: \(f(x)\) 表示 \(x\) 的最大素因子.不难想到:\(X_1 \ ...
- POJ1436
题目链接:https://vjudge.net/problem/POJ-1436 解题思路:基于y轴建立线段树. 如图是根据样例画出的图.下面都以题目样例为例. 但是,如果仅仅以给出的y1, y2为边 ...
- Vue 更换页面图标和title
1.基础的做法就是直接换掉,logo换的时候需要使用icon格式的图标 title 直接在index.html 里面把原来的title注释掉 或者直接改了就行 2. 如果需要进行相应的改变啥的 ,需要 ...
- Mybatis配置-简单的使用
导包 基本配置 配置mybatis.config.xml文档 <?xml version="1.0" encoding="UTF-8" ?> < ...
- EL表达式用法---查询博客
jsp脚本:<%=request.getAttribute(name)%>EL表达式替代上面的脚本:${requestScope.name} 使用EL最主要的作用是获得四大域中的数据,格式 ...
- 第二章-数据绑定和第一个AnglarJS Web应用
Angularjs中的数据绑定 AngularJS创建实时模板来代替视图,而不是将数据合并进模板之后更新DOM.任何一个独立视图组件中的值都是动态替换的.这个功能可以说是AngularJS中最最重要的 ...
- 跟着拉大锯大神学Android——网络编程中运行后台服务器端口占用问题
拉大锯网页地址:https://www.sunofbeach.net/u/1153952789488054272 跟着拉大锯大神学Android,在学到网络编程时,使用了大神搭建的用于学习的后台服务器 ...
- 四、Spring-面向切面编程
内容 面向切面编程基本原理 通过POJO创建切面 使用@AspectJ注解 为AspectJ切面注入依赖 关键词 横切关注点(cross-cutting concern) 继承 (inheritanc ...