C++程序在执行时,将内存大方向划分为4个区域
1.代码区:存放函数体的二进制代码,由操作系统进行管理;
2.全局区:存放全局变量和静态变量以及常量;
3.栈区:由编译器自动分配释放, 存放函数的参数值,局部变量等;
4.堆区:由程序员分配和释放,若程序员不释放,程序结束时由操作系统回收。
C++中主要利用new在堆区开辟内存,堆区开辟的数据,由程序员手动开辟,手动释放,释放利用操作符 delete。
利用new创建的数据,会返回该数据对应的类型的指针
例如:
int* func()//返回int指针的函数
{
	int* a = new int(10);
	return a;
}
int main() {
	int *p = func();
	cout << *p << endl;
	//利用delete释放堆区数据
	delete p;//要记得释放!!
	//cout << *p << endl; //报错,释放的空间不可访问
	system("pause");
	return 0;
}
new的释放:
delete p;//p不是数组变量 delete[] p;//p是数组
栈区的数据由编译器释放,因此函数中的局部变量不能作为地址或者引用返回
//错误示范1:
int * func()
{
	int a = 10;
//若是用static把局部变量变为静态变量,则可以用
//static int a =10;
	return &a;
}
int main() {
	int *p = func();
	cout << *p << endl;
	system("pause");
	return 0;
}
//错误示范2:
/返回局部变量引用
int& test01() {
	int a = 10; //局部变量
//若是用static把局部变量变为静态变量,则可以用
//static int a =10;
	return a;
}
int main()
{
	//不能返回局部变量的引用
	int& ref = test01();
	cout << "ref = " << ref << endl;
}
正确使用函数中局部变量作为值返回
例如:
#include <iostream>
using namespace std;
int test01() {
    int a = 10; //局部变量
	return a;
}
int main() {
	int ref = test01();
	cout << "ref = " << ref << endl;
}
到此这篇关于C++之内存分区的实现示例的文章就介绍到这了,更多相关C++ 内存分区内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
来源链接:https://www.jb51.net/program/3185416d8.htm
© 版权声明
本站所有资源来自于网络,仅供学习与参考,请勿用于商业用途,否则产生的一切后果将由您(转载者)自己承担!
如有侵犯您的版权,请及时联系3500663466#qq.com(#换@),我们将第一时间删除本站数据。
如有侵犯您的版权,请及时联系3500663466#qq.com(#换@),我们将第一时间删除本站数据。
THE END
    










暂无评论内容