-
程序运行前
-
全局区
- 存放全局变量,静态变量,常量(字符串常量以及const修饰的全局变量)
- 这个区域的数据在程序结束后被操作系统释放
#include<iostream> using namespace std; long long a=10;//全局变量 const long long b=20;//const修饰的全局变量 int main() { static long long d=30;//静态变量 cout<<(long long)&a<<endl; cout<<(long long)&b<<endl; cout<<(long long)&d<<endl; return 0; }
这时会发现这几个量的地址是相似的,说明他们都同一个区
-
以此类推,局部变量就是不在全局区里的,他们的地址是有差别的,这里就不再过多写代码
-
代码区
- 存放cpu执行的指令
- 代码区是共享、只读属性(提高效率、防止修改)
-
程序运行后
-
栈区
- 由编译器自动分配释放,存放函数参数值,局部变量等
- 注意不要返回局部变量的地址,栈区开辟的地址执行完后由编译器自动释放,第一次编译器做了保留,可以执行,再次执行会出现乱码
-
堆区
- 由程序员分配释放,可以选择释放空间或者不释放,程序结束由操作系统自动回收
- 主要用new在堆区分配内存,用delete释放空间
-
new用法
new+数据类型//
int *p;p=new int();//分配
delete p;//释放
注意new和delete要配对使用
int *p;p=new int[];
delete[]p;//分配数组空间,也需要释放数组空间
new的具体用法可以参照C++基础 — new的使用_c++ new-CSDN博客这位博客讲的非常详细;
然后内容参照来源黑马程序员,本文只是个人总结