CPP基础知识

CPP基础知识

1、const关键字与宏定义的区别是什么?

  1. 编译器的处理方式不同。宏定义是在预处理阶段做字符串的替换,而const是在编译时。
  2. 类型和安全检查不同。宏定义没有类型,不做任何类型检查;const常量有自己的类型,编译时作类型检查。实际使用中,应用const替换宏定义,减少犯错误概率。

2、malloc的底层实现是怎样的?free是怎么回收内存的?

  1. malloc函数的实质是它有一个将可用的内存块连接为一个长长的列表的空闲链表。
  2. 调用malloc函数时,它沿着链表找到一个大到足以满足用户请求的内存块,将其一分为二,一块分给用户,一块留在链表中。
  3. 调用free函数时,将用户释放的内存块连接到链表上。
  4. 最后,空闲链表会被切成很多小的内存块,如果这时用户申请一个大内存块,若空闲链表上没有满足要求的内存块,malloc函数会请求延时,并在空闲链表上检查各内存片段,将相邻的小空闲块合并成较大的内存块。

3、new/delete与malloc/free的区别与联系是什么?(面试常考)

​ 联系:1、都是申请堆空间
​ 2、必须成对出现,否则会造成内存泄漏
​ 区别:1、new/delete都是c++的运算符,malloc/free是c语言库函数
​ 2、new在开辟空间的同时可以进行初始化,malloc只会申请空间

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值