C/C++: Inline function, calloc 对比 malloc

Inline function is like a macro definition. When it was be called in another function, the control right will not be changed to this function. The compiler will just replace the line of inline function with the actual content of the function. We use inline function to eliminate the cost of calling a function.

内联函数从源代码层看,有函数的结构,而在编译后,却不具备函数的性质。内联函数不是在调用时发生控制转移,而是在编译时将函数体嵌入在每一个调用处。编译时,类似宏替换,使用函数体替换调用处的函数名。内联扩展是用来消除函数调用时的时间开销。它通常用于频繁执行的函数。 一个小内存空间的函数非常受益。

带参数的宏定义的一般形式如下:

#define <宏名>(<参数表>) <宏体>

其中, <宏名>是一个标识符,<参数表>中的参数可以是一个,也可以是多个,视具体情况而定,当有多个参数的时候,每个参数之间用逗号分隔。<宏体>是被替换用的字符串,宏体中的字符串是由参数表中的各个参数组成的表达式。

#define SUB(a,b) a-b

如果在程序中出现如下语句:

result=SUB(2, 3);

则被替换为:

result=2-3;

calloc与malloc的区别:

calloc在动态分配完内存后,自动初始化该内存空间为零,而malloc不初始化,里边数据是随机的垃圾数据。

用法:

void *calloc(size_t n, size_t size);

一般使用后要使用 free(起始地址的指针) 对内存进行释放,不然内存申请过多会影响计算机的性能,以至于得重启电脑。如果使用过后不清零,还可以使用指针对该块内存进行访问.

(0)

相关推荐

  • c语言中malloc、realloc与calloc 的区别以及联系

    ANSI C说明了三个用于存储空间动态分配的函数(1) malloc分配指定字节数的存储区.此存储区中的初始值不确定 (2) calloc为指定长度的对象,分配能容纳其指定个数的存储空间.该空间中的每一位(bit)都初始化为0 (3) realloc  更改以前分配区的长度(增加或减少).当增加长度时,可能需将以前分配区的内容移到另一个足够大的区域,而新增区域内的初始值则不确定 .分配函数时再分配 realloc()使我们可以增.减以前分配区的长度(最常见的用法是增加该区). 如果先分配一个可容

  • C/C++: Inline function, calloc 对比 malloc

    Inline function is like a macro definition. When it was be called in another function, the control right will not be changed to this function. The compiler will just replace the line of inline function with the actual content of the function. We use

  • C语言中 malloc,calloc,realloc的区别

    C语言中 malloc.calloc.realloc的区别 (1)C语言跟内存分配方式 <1>从静态存储区域分配. 内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在.例如全局变量.static变量. <2>在栈上创建 在执行函数时,函数内局部变量的存储单元都可以在栈上创建,函数执行结束时这些存储单元自动被释放.栈内存分配运算内置于处理器的指令集中,效率很高,但是分配的内存容量有限. <3>从堆上分配,亦称动态内存分配. 程序在运行的时候用malloc

  • SQL Function 自定义函数详解

    目录 产生背景(已经有了存储过程,为什么还要使用自定义函数) 发展历史 构成 使用方法 适用范围 注意事项 疑问 内容 产生背景(已经有了存储过程,为什么还要使用自定义函数) 与存储过程的区别(存在的意义): 1.     能够在select等SQL语句中直接使用自定义函数,存储过程不行. 2.     自定义函数可以调用其他函数,也可以调用自己(递归) 3.     可以在表列和 CHECK 约束中使用自定义函数来实现特殊列或约束 4.       自定义函数不能有任何副作用.函数副作用是指对

  • php商品对比功能代码分享

    下面是自己亲自动手编写的代码,和大家一起学习研究. 商品对比调用的JS文件(包含了商品对比框浮动JS): /*浮动窗口*/ (function(){ var n=10; var obj=document.getElementById("goods-compare"); if(!obj){ return false; } var x=0; window.onscroll=function(){ obj.style.top=(document.body.scrollTop||documen

  • php+ajax实现商品对比功能示例

    本文实例讲述了php+ajax实现商品对比功能.分享给大家供大家参考,具体如下: 商品对比调用的JS文件(包含了商品对比框浮动JS): /*浮动窗口*/ (function(){ var n=10; var obj=document.getElementById("goods-compare"); if(!obj){ return false; } var x=0; window.onscroll=function(){ obj.style.top=(document.body.scr

  • C++ inline内联函数详解

    函数是一个可以重复使用的代码块,CPU 会一条一条地挨着执行其中的代码.CPU 在执行主调函数代码时如果遇到了被调函数,主调函数就会暂停,CPU 转而执行被调函数的代码:被调函数执行完毕后再返回到主调函数,主调函数根据刚才的状态继续往下执行. 一个 C/C++ 程序的执行过程可以认为是多个函数之间的相互调用过程,它们形成了一个或简单或复杂的调用链条,这个链条的起点是 main(),终点也是 main().当 main() 调用完了所有的函数,它会返回一个值(例如return 0;)来结束自己的生

  • C语言内存的动态分配比较malloc和realloc的区别

    C-动态内存分配之malloc与realloc的区别 在程序的执行期间分配内存时,内存区域中的这个空间称为堆(heap).还有另一个内存区域,称为栈(stack),其中的空间分配给函数的参数和本地变量.在执行完该函数后,存储参数和本地变量的内存空间就会释放.堆中的内存是由程序员控制的.在分配堆上的内存时,由程序员跟踪所分配的内存何时不再需要,并释放这些空间,以便于以后重用它们.      使用动态内存很明显的好处就是:不需要预先分配存储空间且分配的空间可以根据程序的需要扩大或缩小,这样可以有效的

  • Golang判断struct/slice/map是否相等以及对比的方法总结

    目录 前言 == 的对比方式 == 适用的类型 slice和map使用 == channel使用 == struct结构体使用== reflect.DeepEqual() 和cmp.Equal() reflect.DeepEqual() cmp.Equal() cmp和DeepEqual的区别 性能比较 总结 前言 平时开发中对比两个struct或者map.slice是否相等是经常遇到的,有很多对比的方式,比如==,reflect.DeepEqual(),cmp.Equal()等也是经常容易混淆

  • 代码从windows下visual studio到andriod平台迁移实现步骤

    代码从windows下visual studio到andriod平台迁移实现步骤: 前言 前言也是迁言,从windows的visual studio 2012平台迁移到Android平台上,需用修改挺多的代码和需用注意地方. 我们当然的平台当初就考虑了其他平台跨平台的应用问题,所以一开始在windows下就是用cmake来完成工程的建立的,cMakeLists.txt文件都做了一些处理,但是此时只是更针对或说首先保证windows下的编译和使用. 谨此做个记录. 1. modify cMakeL

  • Kotlin中协变、逆变和不变示例详解

    前言 Kotlin 泛型的基本语法类似于 Java ,不过出于型变安全,不支持 Java 中的<? extends T>,<?super T> 通配符型变约束,而是采用类似 C# 的 in,out 用于支持协变和逆变,这同时避免了处理子类型化,父类化的问题(即Java泛型中典型的List<T> 不是 List<Object>的子类型的问题): 基本的泛型语法可以参考官方中文文档:https://www.kotlincn.net/docs/reference/

随机推荐