C内存模型(一)

C代码经过预处理、编译、汇编、链接4步后生成一个可执行程序,运行的C程序,有必要对其内存结构进行了解: 

   在 Windows 下,程序是一个普通的可执行文件,以下列出一个二进制可执行文件的基本情况:

   

一、内存分布

1.代码区

   a、加载的是可执行文件代码段,所有的可执行代码都加载到代码区,这块内存是不可以在运行期间修改的 

      b、放 CPU 执行的机器指令。通常代码区是可共享的(即另外的执行程序可以调用它),使其可共享的目的是对于频繁被执行的程序,只需要在内存中有一份代码即可。代码区通常是只读的,使其只读的原因是防止程序意外地修改了它的指令。另外,代码区还规划了局部变量的相关信息;

2.Data 区

       该区包含了在程序中明确被初始化的全局变量、已经初始化的静态变量(包括全局静态变量和局部静态变量)和常量数据(如字符串常量)。

3. BSS区

      存入的是全局未初始化变量和未初始化静态变量。未初始化数据区的数据在程序开始执行之前被内核初始化为 0 或者空(NULL)。

注:程序在加载到内存前,代码区和全局区(data和bss)的大小就是固定的,程序运行期间不能改变。然后,运行可执行程序,系统把程序加载到内存,除了根据可执行程序的信息分出代码区(text)、数据区(data)和未初始化数据区(bss)之外,还额外增加了栈区、堆区。

4.栈区

  栈是一种先进后出的内存结构,由编译器自动分配释放,存放函数的参数值、返回值、局部变量等。在程序运行过程中实时加载和释放,因此,局部变量的生存周期为申请到释放该段栈空间

5.堆区

  堆是一个大容器,它的容量要远远大于栈,但没有栈那样先进后出的顺序。用于动态内存分配。堆在内存中位于BSS区和栈区之间。一般由程序员分配和释放,若程序员不释放,程序结束时由操作系统回收。

 

推荐这些文章:

1.程序的内存模型

大纲
1.编程步骤
2.内存四区
3.栈区和堆区的区别
4.new命令的使用
 

 
1.编程步骤
源代码(.c/.cpp)-->编译器(compiler)-->目标代码(.obj/.o,即二进制文件)-->链接程序(启用代码+库代码)-->可执行程序(.exe)
 
2.内存四区

1.代码区: 存放CPU的执行指令、机器指令,共享、只读...

c++内存分区模型

代码区:存放所有代码的二进制
全局区,存放全局变量,静态变量,常量
栈区,编译器自动分配与释放,存放函数参数值和局部变量,随函数结束而释放
堆区,有程序员进行分配与释放,或者函数结束时自动释放
不同区域用于存放那个不同的数据,有不同的生命周期
在程序编写完,编译后,生成exe文件,这时已经出现两个区域,代码区和全局区,代码区存放cpu执行的机器指令,自身是共享的和只读的,全局区存放全局变量,静态...

c++基础知识-程序内存模型

一、程序内存模型
根据运行前与运行后,一共分为四大区域:
1.程序运行前:代码区、全局区;
2.程序运行后:栈区、堆区;
 
二、代码区
程序运行前写的所有代码,最后全部转换成二进制录入电脑
 
三、全局区
包括:
全局变量:写在函数体之外的变量;
静态变量:在普通变量前加关键字static;
常量:字符串常量与const修饰的全局变量;
 
四、栈区
局部变量、形...

073.程序的内存模型-内存四区-栈区

#include <iostream>
using namespace std;
//栈区数据注意事项--不要返回局部变量的地址
//栈区的数据有编译器管理开辟和释放

int* func(int b)//形参数据也会放在栈区
{
b = 100;
int a = 10;//局部变量存放在栈区,栈区的数据在函数执行完后自动释放
return &a;/...

c++入门学习----初识 C++中的分区模型

内存的分区模型
代码区全局区栈区堆区
代码区和 全局区 是代码运行之前划分的两个区 代码运行后才有的 栈区和堆区
全局区:全局变量 静态变量 全局区还包括 常量区 字符串常量 和其他常量都放在这边 该区域的数据在程序结束后由操作系统来释放
全局变量和 静态变量存储的区域 都属于全局区 这两个挨着比较近
常量和 变量存储虽然都是 全局区 但是他们的内存地址 也是有一点点距离 常量 分为 字符串常...

知识点复习 (14)—— 内存分区模型

C++程序在执行时,将内存大致分为4个区域。

代码区:存放函数体的二进制代码,由操作系统进行管理
全局区:存放全局变量和静态变量以及常量
栈区    :由编译器自动分配释放,存放函数的参数值,局部变量等
堆区    :由程序员分配和释放,若程序员不释放,程序结束时由操作系统释放回收

 
内存四区的意义:
不同区域存放的数据,赋予不同的生命周期...

JVM内存模型、JVM主要组成成分

JVM内存模型

JVM主要组成成分

...

arm64内存-fixmap-宏定义和初始化

 
arch/arm64/include/asm/fixmap.h 中的定义
enum fixed_addresses
地址类型枚举,在 101 行的函数  __set_fixmap(idx, phys) 第一个参数用到。 将一个物理地址,映射到   idx 代表的 VA 地址上面。

25/*
26 * Here we define all the co...

java代码中普通代码块,静态代码块,构造代码块的区别

 
 1.普通代码块只有相关的方法调用时才能触发
2.静态代码块只在类加载时触发
3.构造代码块只在初始化创建对象时触发

 
 4.静态代码块中只能引用静态方法
 

...

内存分区模型

1 内存分区模型
C++程序在执行时,将内存大方向划分为4个区域

代码区:存放函数体的二进制代码,由操作系统进行管理的
全局区:存放全局变量和静态变量以及常量
栈区:由编译器自动分配释放, 存放函数的参数值,局部变量等
堆区:由程序员分配和释放,若程序员不释放,程序结束时由操作系统回收

内存四区意义:
不同区域存放的数据,赋予不同的生命周期, 给我们更大的灵活编程
 
 ...

文章标题:C内存模型(一)
文章链接:https://www.dianjilingqu.com/2146.html
本文章来源于网络,版权归原作者所有,如果本站文章侵犯了您的权益,请联系我们删除,联系邮箱:saisai#email.cn,感谢支持理解。
THE END
< <上一篇
下一篇>>