自学内容网 自学内容网

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 是对其解引用,存的就是开辟的空间,存放在堆区;


原文地址:https://blog.csdn.net/2302_80472547/article/details/143028691

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!