1 代码区
存放 cpu 执行的机器指令。通常代码区是可共享的(即另外的执行程序可以调用它),使其可共享的目的是对于频繁被执行的程序,只需要在内存中有一份代码即可。代码区通常是只读的,使其只读的原因是防止程序意外地修改了它的指令。另外,代码区还规划了局部变量的相关信息。
总结:你所写的所有代码都会放入到代码区中,代码区的特点是共享和只读。
2 全局区
全局区中主要存放的数据有:全局变量、静态变量、常量(如字符串常量)
全局区的叫法有很多:全局区、静态区、数据区、全局静态区、静态全局区
这部分可以细分为data区和bss区
2.1 data区
data区里主要存放的是已经初始化的全局变量、静态变量和常量
2.2 bss区
bss区主要存放的是未初始化的全局变量、静态变量,这些未初始化的数据在程序执行前会自动被系统初始化为0或者null
2.3 常量区
常量区是全局区中划分的一个小区域,里面存放的是常量,如const修饰的全局变量、字符串常量等
在vs下运行结果如下:
总结:全局区存放的是全局变量、静态变量和常量
在程序运行后由产生了两个区域,栈区和堆区
3 栈区(stack)
栈是一种先进后出的内存结构,由编译器自动分配释放,存放函数的参数值、返回值、局部变量等。在程序运行过程中实时加载和释放,因此,局部变量的生存周期为申请到释放该段栈空间。
vs运行效果如下
4 堆区(heap)
堆是一个大容器,它的容量要远远大于栈,但没有栈那样先进后出的顺序。用于动态内存分配。堆在内存中位于bss区和栈区之间。一般由程序员分配和释放,若程序员不释放,程序结束时由操作系统回收。
vs运行效果如下:
当我们把几个案例放在一起执行,就可以看到内存将每个区域划分的很有条理。每个区域互不干涉,区域中的数据地址也是非常接近的
光电液位传感器在智能茶饮机液位控制中的应用
2020年的物联网时代:以巨头为中心,物联网业绩难以成规模
PicoG24K体验 设计简洁大气机身轻便佩戴舒适
浅谈雨量监测系统的组成部分
康普RUCKUS观点:共享频谱和融合网络打造2023年企业连接新亮点
C/C++中的内存区域划分
最新资讯|意法半导体TouchGFX Stock简化并加快在STM32 MCU上用户界面设计
安捷伦推出EDA平台最新版本ADS 2012软件
车规芯片与消费电子芯片有何不同?
共创智慧矿山新蓝海
高压电动机维修介质损耗测试仪操作详解
苹果将在明年推出支持5G网络的新款iPad系列
航顺芯片提供ARM+RISC-V异构多核MCU
七彩虹发布首款水冷散热的RTX2060Super显卡
苹果第一次创造 App Store 年度精选的实体奖牌
黑客盯上圣经手稿,频繁攻击梵蒂冈图书馆
鸿蒙原生应用,对开发者意味着什么?
如何使用LED驱动器LM3915制作振动计?
江苏国泰将分拆子公司上市
OPPOR11什么时候上市?OPPOR11携手OPPOR11 Plus即将发布,价格配置全曝光!