new与malloc的区别:
- 在C语言中,使用malloc函数来开辟内存,而在C++中,则是使用关键字new来开辟内存
- new的存储区域为自由存储区域,malloc的存储区域在堆上
- new可以做初始化,malloc只是单纯的开辟内存不能做初始化
- new(operator new 调用构造)可以重载,malloc不能重载
- new可以调用malloc,而malloc不能调用new
- new可以开辟常量,因为它不需要计算内存开辟的大小;malloc不可以因为它需要计算内存开辟的大小
- new的返回类型安全,malloc的返回类型不安全
- 当内存不足时,new抛出异常(bad-alloc),malloc返回NULL指针
- new单个元素内存,用的是delete来释放内存;malloc开辟的内存永远是通过free来释放的
- new的开辟方式有四种;malloc的开辟方式只有一种
引用和指针的区别
- 指针可以不初始化,通过赋值可以指向任意同类型的内存;引用一定要初始化,并且引用一经引用了一块内存,就不能修改了
- 指针在进行sizeof操作时,在32位系统下永远是4个字节,引用的sizeof操作计算的时它所引用的内存大小
- 从汇编上看引用和指针可以看出,引用就是指针操作,定义一个引用变量,相当于就是定义了一个指针,然后把引用内存的地址写到这个指针里面,当通过引用变量修改它所引用的内存时,从汇编上可以看到,它先访问了里面的地址,然后在这个地址的内存里面修改值
内联函数的特点,与宏、普通函数、static修饰的函数的区别
inline函数:把代码在函数的调用点直接展开
inline函数与宏的区别:
- inline的处理是在编译阶段,有完整的语句类型检查和安全检查;宏是在编译阶段处理的,纯粹是字符串替换,没有任何类型的检查和安全检查,不安全。inline比宏更安全
- inline函数在debug版本下和普通函数一样,出了问题可以进行调试,定位问题;宏是无法调试的
- inline函数的结构模块化清晰,方便阅读代码;大量的宏不方便阅读代码
- inline函数没有开栈开销;宏有开栈的开销
inline函数与普通函数的区别:
inline函数是在编译阶段在函数的调用点将函数展开,无开栈清栈的开销(执行开销<调用开销);普通函数需要给函数开辟栈帧,当函数运行完成时,有函数退出栈帧的过程,因此普通函数有开栈和清栈的开销(执行开销>调用开销)
inline函数和static修饰的函数的区别:
(1)inline没有开栈和清栈开销,static有
(2)inline因为编译阶段代码展开导致函数本文件可见,static是因为符号属性为1 本文件可见
inline注意事项:
(1)inline一般写在头文件中
(2)inline只在release版本生效,在debug版本里面,inline函数的调用也需要栈帧的开辟和回退
(3)inline是给编译器的一个建议(递归、循环、switch一定不会处理成inline)
(4)inline是基于实现的,不是基于声明的