内联函数

UIKIT_STATIC_INLINE UIEdgeInsets UIEdgeInsetsMake(CGFloat top, CGFloat left, CGFloat bottom, CGFloat right) {
UIEdgeInsets insets = {top, left, bottom, right};
return insets;
}

UIKIT_STATIC_INLINE UIOffset UIOffsetMake(CGFloat horizontal, CGFloat vertical) {
UIOffset offset = {horizontal, vertical};
return offset;
}

define UIKIT_STATIC_INLINE static inline

这个函数是一个静态的内联函数!结论是:

引入内联函数是为了解决函数调用效率的问题

由于函数之间的调用,会从一个内存地址调到另外一个内存地址,当函数调用完毕之后还会返回原来函数执行的地址。函数调用会有一定的时间开销,引入内联函数就是为了解决这一问题。

那么引用内联函数到底有什么区别呢?

“为了解决函数调用效率的问题”

如何解决呢?

如果用static inline声明一个内联函数,

ifndef inline_inline_h
define inline_inline_hstatic inline int add(int a, int b){
return a+b;
}#endif

http://blog.csdn.net/chsadin/article/details/47982923

CALL(LCALL)指令执行时,进行两步操作:
(1)将程序当前执行的位置IP压入堆栈中;
(2)转移到调用的子程序。

CALL与RET结合使用,当CALL调用的子程序运行到RET命令时,压入堆栈的IP弹出,跳出子程序,开始执行CALL的下一条语句。

一般来说,执行一条CALL指令相当于执行一条PUSH指令加一条JMP指令。
call指令是调用子程序,后面紧跟的应该是子程序名或者过程名。

JMP是汇编语言中的无条件跳转指令。无条件跳转指令可转到内存中任何程序段。转移地址可在指令中给出,也可以在寄存器中给出,或在储存器中指出。

1.call和ret指令都是转移指令,它们都修改IP的值,或同时修改CS和IP的值。它们经常共同用语实现子程序的设计。
2.ret指令用栈中的数据,修改IP的内容,从而实现近转移。
3.retf指令用栈中的数据,修改CS和IP的内容,从而实现远转移。
4.CPU执行ret指令时,相当于进行:
pop IP
执行retf指令时,相当于进行:
pop IP
pop CS
5.CPU执行call指令时,进行两步操作:
(1)将当前的IP或CS和IP压入栈中;
(2)转移

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值