文章目录
一. C++内存分布
globalVar在哪里?----->全局变量在静态区(数据段)
staticGlobalVar在哪里?----->静态变量在静态区(数据段)
staticVar在哪里?----->静态的局部变量也是静态变量,在静态区(数据段)
localVar在哪里?----->局部变量在栈
num1是数组名,表示首元素地址
num1数组中存储的元素也是在栈上的,所以首元素地址也是栈上的地址
num1 在哪里?----->。栈
char2在哪里?-----> 栈
*char2在哪里?----->(char2在sizeof时代表数组名,运算时代表首元素地址)
pChar3在哪里?----->pChar3是一个指针,是字符串常量"abcd"的地址,指针变量本身是在栈上创建的
*pChar3在哪里?----->*pChar3是字符串常量,在常量区(代码段)
指针变量本身是在栈上创建的,指针管理的空间都是在堆上创建的
1.简单理解:指针变量是这个栈帧里的局部变量,存储在栈里
2.ptr123管理的空间都是动态开辟的内存(malloc,realloc),这些空间是在堆上创建的
ptr1在哪里?----->栈
*ptr1在哪里?----->ptr1存的是地址,地址是指向malloc的,malloc在堆上
二. C++内存管理方式(new和delete)
2.1 C语言动态内存管理方式
malloc/calloc/realloc/free
但是开辟动态内存,在函数结束时,需要自己释放free()
2.2 C++内存管理
2.2.1 内置类型的内存管理
C++有自己的内存管理方式:通过new
和delete
操作符进行动态内存管理。(它们也是在堆上动态申请)
new
和delete
是新的关键字和操作符。使用:new后面直接+类型
,new int;
即可,如果想初始化,就在类型后面+括号,括号内写初始化值new int(9);
。
//管理对象
int main()
{
int* ptr1=new int(9);
int* ptr2 = new int;