malloc/free 与 new/delete 区别
malloc/free | new/delete | |
---|---|---|
身份 | 函数 | 运算符/关键字 |
返回值 | void* | 带类型的指针 |
参数 | 字符个数(手动计算) | 类型,自动计算字节数 |
失败 | 返回NULL | 抛异常 std::bad_alloc |
构造/析构 | 不调用 | 自动调用 |
初始化 | 不能初始化 | 可以初始化指定的值 |
头文件 | 包含头文件 | 直接使用 |
什么是内联函数
内联函数也会被翻译成二进制指令,调用语句不会生成跳转语句,而直接把函数的二进制指令直接替换调用语句,这样就没有跳转也没有返回,而是直接执行被调函数,我们把这种函数叫内联函数。
隐式内联和显式内联
显示内联:在函数的返回值前面添加 inline 该函数就会以内联机制调用,不是所有的编译器都支持,我们现在使用的g++和gcc就不支持。
隐式内存:结构、联合、类的成员函数会自动被当作内联函数处理。
内联的优缺点:
节约了函数传参、跳转、返回的时间,提高代码运行速度。
缺点:
当内联函数在多个位置被调用,那么该的二进制指令就被拷贝了多份,就样就产生了冗余,因此代码增加导致可执行文件增大。
1、内容简单且会频繁调用的函数(一次调用会被执行到多次),内容多且极少被调用到的函数不适合内联,因为它节约的时间弥补不了牺牲的内存。
2、带有递归特性的函数无法内联,编译器会自动忽略inline关键字。
内联函数与宏函数的相同点和不同
相同点:
都是采用空间换取时间的策略来提高程序的运行速度。
不同点:
1、宏函数不是真正的函数&#x