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

内存分配的区域

介绍

在 C++ 里,定义不同类型的变量,其内存分配的区域也不同。C++ 中的内存一般分为以下几个区域:栈区(Stack)、堆区(Heap)、全局 / 静态区(Global/Static Area)、常量区(Constant Area)和代码区(Code Area)。下面分别介绍不同定义方式下变量的内存分配区域。

栈区(Stack)

栈区由操作系统自动分配和释放,主要用于存储局部变量和函数调用的上下文信息。当函数被调用时,函数内部定义的局部变量会被分配到栈区;当函数执行结束后,这些变量所占用的内存会被自动释放。

#include <iostream>void func() {int num = 10; // 局部变量,分配在栈区std::cout << num << std::endl;
}int main() {func();return 0;
}

 在上述代码中,num 是 func 函数内部的局部变量,它被分配在栈区。当 func 函数执行结束后,num 所占用的内存会被自动释放。

 堆区(Heap)

堆区由程序员手动分配和释放,用于存储动态分配的内存。在 C++ 中,可以使用 new 运算符在堆区分配内存,使用 delete 运算符释放内存。

#include <iostream>int main() {int* ptr = new int(20); // 在堆区分配内存std::cout << *ptr << std::endl;delete ptr; // 释放堆区内存return 0;
}

在上述代码中,ptr 是一个指向堆区内存的指针,new int(20) 在堆区分配了一个 int 类型的内存空间,并将其初始化为 20。使用完后,需要使用 delete 释放该内存。

 全局 / 静态区(Global/Static Area)

 全局 / 静态区用于存储全局变量和静态变量。全局变量是在函数外部定义的变量,静态变量是使用 static 关键字修饰的变量。全局变量和静态变量在程序启动时被分配内存,在程序结束时才被释放。

#include <iostream>int globalVar = 30; // 全局变量,分配在全局/静态区void func() {static int staticVar = 40; // 静态变量,分配在全局/静态区std::cout << staticVar << std::endl;
}int main() {std::cout << globalVar << std::endl;func();return 0;
}

在上述代码中,globalVar 是全局变量,staticVar 是静态变量,它们都被分配在全局 / 静态区。

常量区(Constant Area)

常量区用于存储常量,如字符串常量等。常量区的内存由编译器分配和管理,程序运行期间常量的值不能被修改。

#include <iostream>int main() {const char* str = "Hello, World!"; // 字符串常量,存储在常量区std::cout << str << std::endl;return 0;
}

在上述代码中,"Hello, World!" 是字符串常量,存储在常量区。

代码区(Code Area)

代码区用于存储程序的可执行代码,也就是程序的指令。代码区的内存由操作系统分配和管理,程序运行期间代码区的内容不能被修改。

总结

定义变量时内存分配的区域取决于变量的类型和定义方式。在编写程序时,需要根据实际需求合理选择内存分配方式,避免内存泄漏和其他内存相关的问题。

http://www.xdnf.cn/news/313795.html

相关文章:

  • Python 10天冲刺 《元编程(Meta-programming)》
  • 生态学领域期刊推荐
  • 26.2Linux中SPI的驱动实验(编程)_csdn
  • SUPER-VLAN基础配置
  • 社区、工地、停车场…视频桩如何实现“全场景适配”?
  • 项目三 - 任务3:学生多态方式喂养宠物
  • 卡特兰数--
  • 高等数学第五章---定积分(§5.2微积分基本定理)
  • 通过Config批量注入对象到Spring IoC容器
  • 开源免费视频在线提取工具 MediaGo 介绍
  • 浅析MySQL 的 **触发器(Trigger)** 和 **存储过程(Stored Procedure)原理及优化建议
  • 核函数(Kernel function)
  • GPS定位方案
  • 微机控制技术复习【一】
  • 汇总区间(简单)
  • AI 数字短视频数字人源码开发实用技巧分享​
  • HCIP【STP、RSTP、MSTP协议(详解)】
  • Linux中为某个进程临时指定tmp目录
  • Go语言——string、数组、切片以及map
  • 今年我国已发生三级以上地震318次
  • 从创业踩雷到依法解债:湖北理元理律师事务所的危机拆解逻辑
  • 继电器负载知识
  • 小刚说C语言刷题—1044 -找出最经济型的包装箱型号
  • win11 怎样把D盘空间分给C盘一点
  • day18-API(常见API,对象克隆)
  • 将nginx设置成自启动,防止每次开机后都要自己手动启动
  • nginx服务--基础
  • C语言数组和函数的实践———扫雷游戏
  • 调用DeepSeek的API
  • 文献综述怎么写?高效阅读、智能整理,告别文献焦虑!