当前位置: 首页 > news >正文

【C/C++】程序的内存开辟

在C/C++语言中,不同的类型开辟的空间区域都是不一样的.
这节我们就简单了解下开辟不同的类型内存所存放的区域在哪里.

文章目录

  • 栈区(stack)
  • 堆区(heap)
  • 数据段(静态区)
  • 常量存储区
  • 内存开辟布局图

栈区(stack)

由系统进行内存的管理。主要存放函数的参数以及局部变量,在函数完成执行,系统自行释放栈区内存,不需要用户管理。
而栈区的使用习惯是先使用高地址的空间,在使用低地址的空间。所以栈内存分配运算内置于处理器的指令集中,拥有很高的效率,但是分配的内存容量是有限的。如果超出了容量就会栈溢出(Stack overflow)

堆区(heap)

堆区主要存放,malloc,calloc,realloc等内存函数开辟出来的空间。堆区的空间最好是连续存放的,这样有利于减少内存碎片
堆区的内存一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 。分配方式类似于链表(随机在堆区上开辟一块空间)。

数据段(静态区)

静态存储区内的变量在程序编译阶段已经分配好内存空间并初始化。这块内存在程序的整个运行期间都存在,它主要存放静态数据(static)、全局变量和常量。程序结束后由系统释放。

静态存储区内的常量分为常变量和字符串常量,一经初始化,不可修改。静态存储内的常变量是全局变量,与局部常变量不同,区别在于局部常变量存放于栈,实际可间接通过指针或者引用进行修改,而全局常变量存放于静态常量区则不可以间接修改。所以字符串常量都被放在静态内存区 ,放在静态内存区会提高效率

常量存储区

常量存储区也称代码段或者代码区

存放函数体的二进制代码,由操作系统管理创建,代码区时共享的,对于频繁被执行的程序,只需要存有一份代码即可.


内存开辟布局图

在这里插入图片描述

http://www.lryc.cn/news/43066.html

相关文章:

  • 全网最完整,接口测试总结彻底打通接口自动化大门,看这篇就够了......
  • 28-flume和kafka为什么要结合使用
  • STM32外设-定时器详解
  • 史上最详细的改良顺序表讲解,看完不会你打我
  • 【Unity入门】资源包导入和导出
  • python条件语句与循环语句
  • 【leetcode】链表(2)
  • 使用Vue+vue-router+路由守卫实现路由鉴权功能实战
  • 多线程(三):Thread 类的基本属性
  • 蓝桥杯嵌入式第六课--串口收发
  • 蓝桥杯冲刺 - Lastweek - 你离省一仅剩一步之遥!!!(掌握【DP】冲刺国赛)
  • C++ map与set的学习
  • 【C语言初阶】函数
  • CentOS 7安装redis6.2.6(包括服务开机自启和开放端口)
  • 基于注解的自动装配~
  • 【深度学习】【分布式训练】Collective通信操作及Pytorch示例
  • Spring常用注解说明
  • 13-C++面向对象(纯虚函数(抽象类)、多继承、多继承-虚函数、菱形继承、虚继承、静态成员)
  • Android DataBinding 自定义View实现数据双向绑定
  • 网络安全中的渗透测试主要那几个方面
  • Cursor:GPT-4 驱动的强大代码编辑器
  • C/C++中for语句循环用法及练习
  • AnimatorOverrideController说明
  • 1.4、第三阶段 MySQL数据库
  • LeetCode:202. 快乐数
  • Android 14 新功能之 HighLights:快速实现文本高亮~
  • [渗透教程]-004-嗅探工具-Nmap
  • 大数据技术之Hive SQL题库-初级
  • 常见HTTP状态码汇总
  • 蓝桥杯刷题冲刺 | 倒计时15天