内存分区-代码区、全局区、堆区、栈区
发布日期: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 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
逛到本站,mark一下
[***.202.152.39]2024年04月11日 17时12分13秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
expires与etag控制页面缓存的优先级
2019-04-27
取消掉Transfer-Encoding:chunked
2019-04-27
HTTP协议中的Tranfer-Encoding:chunked编码解析
2019-04-27
JavaScript面向对象编程
2019-04-27
在Javascript中使用面向对象的编程
2019-04-27
PHP Webservice的发布与调用
2019-04-27
php反射类 ReflectionClass
2019-04-27
为 PHP 应用提速、提速、再提速
2019-04-27
Linux下gedit显示行号
2019-04-27
《Advanced PHP Programming》读书笔记
2019-04-27
让我们谈谈RAID
2019-04-27
jQuery日期选择器插件date-input
2019-04-27
PHP使用curl_multi_add_handle并行处理
2019-04-27
NP问题
2019-04-27
AT&T与Intel汇编语言的比较
2019-04-27
javascript解析json
2019-04-27
WinDbg安装与使用
2019-04-27
推荐阅读的多核编程技术书籍
2019-04-27
维基百科上的算法和数据结构链接很强大
2019-04-27
选择排序
2019-04-27