C++的内存分配可以分为3种,静态内存、栈内存、堆内存。
一、静态内存:存储静态变量和全局变量
1、静态变量(包括局部静态变量、类的静态数据成员、全局静态变量)在静态内存中分配内存,当整个程序运行完毕之后才销毁变量,释放内存。
2、初始化时间:
局部静态变量:就是定义在函数或者语句块中的局部静态变量,在第一次使用之前分配内存。
非局部静态变量:在main函数之前的静态初始化过程中分配内存。
3、类静态变量初始化方式
1)静态成员函数(与非静态成员函数一样)既可以在类内初始化也可以在类外初始化。因为静态成员不属于任何一个类,所以不包含this指针,所以静态成员函数中不能使用this指针,也不能使用类的非静态数据成员,即只能使用静态数据成员。
2)静态数据成员在类内声名,类外定义。
3)常量静态数据成员可以在类内定义。如:static constexpr int num=30;
二、说一说栈和堆的区别
1、内存分配方式不同
1)栈内存:
存储局部变量、临时变量、函数参数等,由编译器自动分配和回收内存,
2)堆内存:
由程序员手动分配和回收内存,使用new运算符手动申请内存,必须使用delete手动释放内存
2、申请大小限制
栈:在Windows下,栈是向低地址扩展的数据结构,是一块连续的内存区域。栈通常是有大小限制的,在WINDOWS下,栈的大小是2M(也有的说是1M,总之是一个编译时就确定的常数)ÿ