C++面试常考基础知识总结

C++内存管理

C++中,内存分为5个区:堆、栈、自由存储区、全局/静态存储区和常量存储区。

  • :是由编译器在需要时自动分配,不需要时自动清除的变量存储区。通常存局部变量、函数参数、函数返回值等。大小可以由编译器决定,一般为2M。
  • :由程序员手动申请和释放的内存块,一般用new或者malloc申请内存,用delete或free释放。如果程序员没有释放会导致内存泄漏,内存资源将在程序结束后自动回收。一般大小为4G。
  • 自由存储区
  • 全局/静态存储区:存放全局变量和静态变量的内存单元。
  • 常量存储区:是一块特殊的存储区,用来存放常量,不允许修改。

堆和栈的区别(常考)

管理方式 由程序员控制 编译器自动管理
系统响应 遍历记录空闲内存地址的链表,寻找第一个大于所申请空间的节点,进行内存分配 不超出栈的剩余空间,系统自动分配
空间大小 4G(具体看情况) 2M,有的IDE可以设置
碎片问题 容易产生内存碎片 先进后出,不会产生碎片
生长方向 向高地址增长 向低地址增长
分配方式 动态分配 静态分配和动态分配(编译器自动释放)
分配效率 效率低 效率高

堆栈溢出

(1)函数调用层次太深或数组开的太大—栈溢出
(2)动态申请空间后没后释放
(3)数组访问越界。
(4)指针非法访问。

指针(c++的灵魂)

指针
引用&#

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值