C/C++: Inline function, calloc 对比 malloc
Inlinefunctionislikeamacrodefinition.Whenitwasbecalledinanotherfunction,thecontrolrightwillnotbechangedtothisfunction.Thecompilerwilljustreplacethelineofinlinefunctionwiththeactualcontentofthefunction.Weuseinlinefunctiontoeliminatethecostofcallingafunction.
内联函数从源代码层看,有函数的结构,而在编译后,却不具备函数的性质。内联函数不是在调用时发生控制转移,而是在编译时将函数体嵌入在每一个调用处。编译时,类似宏替换,使用函数体替换调用处的函数名。内联扩展是用来消除函数调用时的时间开销。它通常用于频繁执行的函数。一个小内存空间的函数非常受益。
带参数的宏定义的一般形式如下:
#define<宏名>(<参数表>)<宏体>
其中,<宏名>是一个标识符,<参数表>中的参数可以是一个,也可以是多个,视具体情况而定,当有多个参数的时候,每个参数之间用逗号分隔。<宏体>是被替换用的字符串,宏体中的字符串是由参数表中的各个参数组成的表达式。
#defineSUB(a,b)a-b
如果在程序中出现如下语句:
result=SUB(2,3);
则被替换为:
result=2-3;
calloc与malloc的区别:
calloc在动态分配完内存后,自动初始化该内存空间为零,而malloc不初始化,里边数据是随机的垃圾数据。
用法:
void*calloc(size_tn,size_tsize);
一般使用后要使用free(起始地址的指针)对内存进行释放,不然内存申请过多会影响计算机的性能,以至于得重启电脑。如果使用过后不清零,还可以使用指针对该块内存进行访问.