c++程序执行时,将内存大致分为四个区域
- 代码区:存放函数的二进制代码,由操作系统进行管理(共享、只读)
- 全局区:存放全局变量,静态变量以及常量(结束后,有操作系统释放)
- 栈区:由编译器自动分配释放,存放函数的参数数值,局部变量等
- 堆区:由程序员分配和释放,若程序员结束时由操作系统回收
- 全局区:全局变量、静态变量、常量(字符串常量、const修饰的全局变量)
include
using namepase std; //全局变量 int q_a=10; int q_b=10; //const修饰的全局常量 const int c_q_a=10; const int c_q_a=10; int main() { //全局区 //全局变量、静态变量、常量 //创建普通局部变量 int a=10; int b=10; //这两个局部变量的地址相差不大,说明是储存在同一个区域内 cout <<"局部变量a的地址为:"<<(int)&a< - 栈区:注意不要返回局部变量的地址,栈区的数据由编译器自动释放
include
using namepase std; int fun(int b)//形参数据会放在栈区 { int a=10;//局部变量存储在栈区,栈区数据在函数执行完后自动释放 return &a;//返回局部变量的地址 } int main() { int *p=fun(1);//接受fun函数的返回值 cout<<*p< 3.堆区 include
using namepase std; int fun() { //利用new关键字,可以将数据开辟到堆区 int *p = new int (10);//指针本质是局部变量,放在栈上,指针保存的数据是放在堆区 return p; } int main() { int *p = func(); //因为指针指向的内容是放在堆区,由程序员来释放的,所以这里输出两次以上的数值,它依旧是正确的数值 cout << *P< 4.new的操作符
- c++利用new开辟数据区
- 堆数据的开辟,由程序员开辟,手动释放,释放利用操作符delete
- 利用new创建的数据,会返回该数据对应的类型的指针
includeusing namepase std; int fun() { //利用new关键字,可以将数据开辟到堆区,返回的是该类型的指针,所以要用指针去接受它 int *p = new int (10);//指针本质是局部变量,放在栈上,指针保存的数据是放在堆区 return p; } //new的基本操作 void test01() { int *p = func(); cout << *P<



