C++程序在执行时,将内存大方向划分为4个区域
1.代码区:存放函数体的二进制代码,由操作系统进行管理;
2.全局区:存放全局变量和静态变量以及常python量;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 &ljavascriptt;< *p << endl; //报错,释放的空间不可访问 system("pause"); return 0; }
new的释放:
delete p;//p不是数组变量 deletepython[] 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&gwww.devze.comt; using namespace std; int test01() { int a = 10; //局部变量 return a; } int main() { int ref = test01(); cout << "ref = " <&www.devze.comlt; ref << endl; }
到此这篇关于C++之内存分区的实现示例的文章就介绍到这了,更多相关C++ 内存分区内容请搜索编程客栈(www.devze.com)以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程客栈(www.devze.com)!
精彩评论