C与C++的区别

newmalloc的区别:

  1. 在C语言中,使用malloc函数来开辟内存,而在C++中,则是使用关键字new来开辟内存
  2. new的存储区域为自由存储区域,malloc的存储区域在堆上
  3. new可以做初始化,malloc只是单纯的开辟内存不能做初始化
  4. new(operator new  调用构造)可以重载,malloc不能重载
  5. new可以调用malloc,而malloc不能调用new
  6. new可以开辟常量,因为它不需要计算内存开辟的大小;malloc不可以因为它需要计算内存开辟的大小
  7. new的返回类型安全,malloc的返回类型不安全
  8. 当内存不足时,new抛出异常(bad-alloc),malloc返回NULL指针
  9. new单个元素内存,用的是delete来释放内存;malloc开辟的内存永远是通过free来释放的
  10. new的开辟方式有四种;malloc的开辟方式只有一种

引用和指针的区别

  1. 指针可以不初始化,通过赋值可以指向任意同类型的内存;引用一定要初始化,并且引用一经引用了一块内存,就不能修改了
  2. 指针在进行sizeof操作时,在32位系统下永远是4个字节,引用的sizeof操作计算的时它所引用的内存大小
  3. 从汇编上看引用和指针可以看出,引用就是指针操作,定义一个引用变量,相当于就是定义了一个指针,然后把引用内存的地址写到这个指针里面,当通过引用变量修改它所引用的内存时,从汇编上可以看到,它先访问了里面的地址,然后在这个地址的内存里面修改值

内联函数的特点,与宏、普通函数、static修饰的函数的区别

inline函数:把代码在函数的调用点直接展开

inline函数与宏的区别:

  1. inline的处理是在编译阶段,有完整的语句类型检查和安全检查;宏是在编译阶段处理的,纯粹是字符串替换,没有任何类型的检查和安全检查,不安全。inline比宏更安全
  2. inline函数在debug版本下和普通函数一样,出了问题可以进行调试,定位问题;宏是无法调试的
  3. inline函数的结构模块化清晰,方便阅读代码;大量的宏不方便阅读代码
  4. 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是基于实现的,不是基于声明的

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值