CPP基础知识
1、const关键字与宏定义的区别是什么?
- 编译器的处理方式不同。宏定义是在预处理阶段做字符串的替换,而const是在编译时。
- 类型和安全检查不同。宏定义没有类型,不做任何类型检查;const常量有自己的类型,编译时作类型检查。实际使用中,应用const替换宏定义,减少犯错误概率。
2、malloc的底层实现是怎样的?free是怎么回收内存的?
- malloc函数的实质是它有一个将可用的内存块连接为一个长长的列表的空闲链表。
- 调用malloc函数时,它沿着链表找到一个大到足以满足用户请求的内存块,将其一分为二,一块分给用户,一块留在链表中。
- 调用free函数时,将用户释放的内存块连接到链表上。
- 最后,空闲链表会被切成很多小的内存块,如果这时用户申请一个大内存块,若空闲链表上没有满足要求的内存块,malloc函数会请求延时,并在空闲链表上检查各内存片段,将相邻的小空闲块合并成较大的内存块。
3、new/delete与malloc/free的区别与联系是什么?(面试常考)
联系:1、都是申请堆空间
2、必须成对出现,否则会造成内存泄漏
区别:1、new/delete都是c++的运算符,malloc/free是c语言库函数
2、new在开辟空间的同时可以进行初始化,malloc只会申请空间