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

C++的内存管理

@[TOC}

C++的内存管理

在这里插入图片描述

各个区储存内容

1.栈

局部变量和在执行函数时,函数中创建的局部变量都会在栈上创建,函数执行结束时会被自动释放。从高地址向低地址储存。

2.堆

是new/malloc/calloc/realloc分配的代码块,需要手动释放。如果程序员没有手动释放,在程序结束后,操作系统会自动释放回收。从低地址向高地址储存。

3.内存映射区

4.静态区/数据段

全局变量和静态变量储存在这。

5.常量区/代码区

存放常量,不允许改变。

#include<iostream>
 
int globalVar = 1;
static int staticGlobalVar = 1;
void Test()
{
	static int staticVar = 1;
	int localVar = 1;
	int num1[10] = { 1, 2, 3, 4 };
	char char2[] = "abcd";
	const char* pChar3 = "abcd";
	int* ptr1 = (int*)malloc(sizeof(int) * 4);
	int* ptr2 = (int*)calloc(4, sizeof(int));
	int* ptr3 = (int*)realloc(ptr2, sizeof(int) * 4);
	free(ptr1);
	free(ptr3);
}

1.globlVar是全局变量,储存在静态区/数据段;
2.staticGlobalVar是全局的静态变量,储存在静态区/数据段;
3.staticVar是静态变量,储存静态区/数据段;
4.localVar是局部变量,储存在栈区;
5.nums1是局部变量,储存在栈区;
6.char2是局部变量,储存在栈区;
7.*char2 指的是首元素的地址,而 char2 是在栈上的数组,所以存放在栈区;
8.pChar3 是局部的指针,存的是 “a,b,c,d\0” 这个常量字符串的首元素地址 ,存放在栈区;
9.*pChar3 是对其解引用,结果就是 “a,b,c,d,\0” 这个常量字符串,存放在代码段;
10.ptr1 是局部的指针,存的是开辟的空间的首元素地址,存放在栈区;
11.*ptr1 是对其解引用,存的就是开辟的空间,存放在堆区;


http://www.kler.cn/news/354356.html

相关文章:

  • 八、特征降维
  • Lua
  • 20241017软考架构-------软考案例3答案
  • FineReport 预览模式简介
  • 新媒体时代,网站建设完成后的网络推广依然很重要
  • 51单片机的晾衣架控制系统【proteus仿真+程序+报告+原理图+演示视频】
  • spark:数据的关联与合并、缓存和checkpoint
  • C++设计模式 原型模式
  • spring boot热部署
  • “vue : 无法加载文件 D:\nodejs\node_global\vue.ps1,因为在此系统上禁止运行脚本”的解决方法
  • 基于php的图书管理系统
  • 录微课专用提词器,不会被录进视频中的提词器,还能显示PPT中备注的内容
  • 图书管理新趋势:Spring Boot进销存系统
  • 涂鸦智能落地 Koupleless 合并部署,实现云服务降本增效
  • [含文档+PPT+源码等]精品大数据项目-python基于hadoop实现的社交媒体数据分析和用户行为预测
  • Okhttp3中设置超时的方法
  • React前端框架高级技巧
  • 分布式数据库的进度管理:TiDB 备份恢复工具 PiTR 的原理与实践
  • 【数据结构】二叉堆一文详解,附demo
  • android studio confirauration中 install flags和launch flags区别