内存分区-代码区、全局区、堆区、栈区
发布日期:2021-11-20 10:17:41 浏览次数:9 分类:技术文章

本文共 1512 字,大约阅读时间需要 5 分钟。

/*

C++在执行程序时,将内存大方向分为四个区域

1.代码区:存放函数体的二进制代码,有操作系统进行管理
2.全局区:存放全局变量和静态变量和常量
静态变量 前面加 static
常量: 字符串常量和const修饰的变量
const修饰的全局变量、const修饰的局部变量

1和2在程序运行前就有的区域

3.栈区:由编译器自动分配释放,存放函数的参数值,局部变量等

**注意:**不要返回局部变量的地址,栈区开辟的数据由编译器自动释放

**4.堆区:**由程序员分配和释放,若程序员不释放,程序结束时由操作系统回收

在C++中主要利用new在堆区开辟内存

new操作符

堆区开辟的数据,由程序员手动开辟,手动释放,
释放利用操作符delete,
语法:new 数据类型
利用 new 创建的数据,会返回该数据对应的类型的指针

*/

代码区和全局区

#include "pch.h"#include 
#include
using namespace std;//全局变量int g_a = 10;//const修饰的全局变量=全局常量const int g_a = 10;int main(){
//普通局部变量,在main函数中 int a = 10; //静态变量,在普通变量前面加static,属于静态变量 static int a = 10; //常量: //字符串常量 string a = "hello"; //const修饰的变量 //const修饰的全局变量和修饰的局部变量 //const修饰的局部变量 const int a = 10;}

栈区

//栈区:int * func() {
int a = 10;//局部变量,存放在栈区,栈区数据在函数执行完后自动释放 return &a;}int main() {
int* p = func(); cout << *p << endl;//第一次可以打印正确,是因为编译器做了保留 cout << *p << endl;//第二次这个数据就不再保留了 return 0;}

堆区

//堆区int* func1() {
//利用new关键字 ,可以将数据开辟到堆区 int* p =new int(10);//利用new为整型的数据10开辟了地址,指针可以存放地址,所以定义了整型的指针变量 return p;}int main() {
//在堆区开辟数据 int * p = func1(); cout << *p << endl; cout << *p << endl; cout << *p << endl; return 0;}

new操作符

//new操作符//1.new的基本语法int *fun() {
//在堆区创建整型数据,返回该数据类型的指针 int* p = new int(10); return p;}void test01() {
int* p = fun(); cout << *p << endl; //如果想释放,用关键字delect}//在堆区开辟数组void test02() {
int* p = new int[10];//10代表数组元素个数 //为数组赋值 for (int i = 0; i < 10; i++) {
p[i] = i + 100; } //释放堆区数组 //释放数组时要加[],才可以 delete[] p;}int main() {
test01();}

转载地址:https://blog.csdn.net/weixin_43223362/article/details/102643120 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:引用-笔记
下一篇:结构体笔记2

发表评论

最新留言

逛到本站,mark一下
[***.202.152.39]2024年04月11日 17时12分13秒