C++内存分配方式

C++内存分配方式

编译器在需要的时候分配,在不需要的时候自动清除的变量的存储区。包括局部变量、函数参数等。在一个进程中,位于用户虚拟地址空间顶部的是用户栈,来实现函数的调用。用户栈在程序执行期间可以动态地扩展和收缩。

new分配的内存块,由delete释放或在程序结束后,操作系统自动回收,也可动态地扩展和收缩。

自由存储区

和堆类似 由malloc分配的内存块,通过free来释放

全局/静态存储区

在C++中全局变量和静态变量分配到同一块内存

常量存储区

里面存放的是常量

堆栈区别

例:
void f() { int *p = new int[5]; } //在栈内存存放了一个指向一块堆的指针p

  • 管理方式不同;
  • 空间大小不同
  • 能否产生碎片不同
  • 生长方向不同
  • 分配方式不同
  • 分配效率不同

管理方式

	栈是由编译器自动管理,堆需要程序员手动释放。

空间大小

	在32位系统下,堆达到4G,栈很小。

碎片问题

	对于堆来讲,new/delete 会造成内存空间的不连续。而栈不会存在这些问题

生长方向

	堆:向着内存地址增加的方向增长	栈:向着内存地址减小的方向增长

分配方式

	堆:动态分配,不存在静态分配。   栈:静态分配和动态分配

分配效率

	栈比堆效率高

static

可以在类中声明 : <类名>::<静态成员名>

  1. 类的静态成员函数不存在this指针,它仅能访问类的静态成员函数和静态数据
  2. 不能将静态成员函数定义为虚函数
  3. 静态成员声明于类中,操作于外,变量地址是指向其数据类型的指针,函数地址类型是一个”非成员函数指针“
  4. 静态成员函数等同于”非成员函数“
  5. static缩短了子类对父类静态成员的访问时间,节省了子类的内存空间
  6. 静态数据成员是静态存储的,得初始化
  7. 初始化在类外进行,不加static
    格式:<数据类型><类名>::<静态数据成员名>=<值>
  8. 静态变量为父类子类共享
  9. 可在子类定义与基类相同的静态变量,直接覆盖。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值