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/

时间: 2024-10-06 11:09:04

Memory layout的相关文章

Memory Layout of C Programs

from apue 7.6. Memory Layout of a C Program A typical memory representation of C program consists of following sections. 1. Text segment2. Initialized data segment    2.1 initialized read-only area    2.2 initialized read-write area3. Uninitialized d

Memory Layout for Multiple and Virtual Inheritance

2016/6/7 phc ­­ Memory Layout for Multiple and Virtual Inheritance ­­ Edsko de Vrieshttp://www.phpcompiler.org/articles/virtualinheritance.html 1/10Home | Download phc | Documentation | Developers and Contributors | Mailing List |Memory Layout for Mu

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) 收藏 举报 found a good example to demostrate the memory layout and its stack info of a user-mode process, only that this example is for Linux. But it is still wo

Memory Layout for Multiple and Virtual Inheritance (一) (部分翻译)

Memory Layout for Multiple and Virtual Inheritance  Sources: http://www.phpcompiler.org/articles/virtualinheritance.html 本文主要介绍了gcc编译器中multiple 和 virtual inheritance中的对象内存布局.虽然C++程序员不需要关心编译器的内部细节,但多重继承(特别是虚拟继承)在C++代码实现中有不同的结果(特别是用pointers to pointers

C语言内存模型 (C memory layout)

 一. 内存模型                                                                         1. .text 代码区(code section).由编译器链接器生成的可执行指令,程序执行时由加载器(loader)从可执行文件拷贝到内存中.为了安全考虑,防止别的区域更改代码区数据(即可执行指令),代码区具有只读属性.另一个方面,代码区通常具有可共享性(sharable),即在内存中只有一份代码区,如编译器,假如同时有多个编译任务

C++ 多继承和虚继承的内存布局(Memory Layout for Multiple and Virtual Inheritance)

警告. 本文有点技术难度,需要读者了解C++和一些汇编语言知识. 在本文中,我们解释由gcc编译器实现多继承和虚继承的对象的布局.虽然在理想的C++程序中不需要知道这些编译器内部细节,但不幸的是多重继承(特别是虚拟继承)的实现方式有各种各样的不太明确的结论(尤其是,关于向下转型指针,使用指向指针的指针,还有虚拟基类的构造方法的调用命令). 如果你了解多重继承是如何实现的,你就能预见到这些结论并运用到你的代码中.而且,如果你关心性能,理解虚拟继承的开销也是非常有用的.最后,这很有趣. :-) 多重

Introduction to C Memory Management and C++ Object-Oriented Programming

C is used when at least one of the following matters: Speed Memory Low-level features(moving the stack pointer, etc.). Level of abstraction Languages Directly manipulate memory Assembly(x86,MIPS) Access to memory C,C++ Memory managed Java,C#,Scheme/L

查看 Granted Memory

由于Sort 和 Hash (Join 或 Aggregation) Operations需要缓存排序中间表和Hash Table,在执行计划真正运行之前,需要向系统申请一定数量的内存资源(Granted Memory),如果SQL Server 不能 allocate 申请的内存,那么该执行计划将不会执行,处于RESOURCE_SEMAPHORE 等待. Resource Semaphore: SQL Server uses a thread synchronization object ca

Java Objects Memory Structure (转)

原文地址http://www.codeinstructions.com/2008/12/java-objects-memory-structure.html Update (December 18th, 2008): I've posted here an experimental library that implements Sizeof for Java. One thing about Java that has always bothered me, given my C/C++ ro