美文网首页
结合汇编谈谈xcode编译器优化

结合汇编谈谈xcode编译器优化

作者: stockholder | 来源:发表于2017-07-27 23:01 被阅读0次

    1.众所周知,OC是一门RunTime语言,比如说我们在.h文件中声明一个方法,但不在.m文件实现,编译的时候是可以通过的,运行的时候才会报错,但如果直接声明了一个c语言的函数没有实现,编译就会直接报错。其实xcode在这两种情况下的函数调用是做了不一样的优化的。请看下面代码;

    上面的代码只是很简单的写了一个函数test()以及在ViewController里面写了一个相同函数体的test1(),可以看一下在下xcode里面运行后的两种调用方式的反汇编代码。

    # Release模式下的情况

    *  调用ViewController消息test1()的反汇编代码

    可以看到callq  *%rbx 就是test1()的调用,从lldb里面进入该函数(命令是s),可以看到test1()里面的过程

    *   调用c函数test()的反汇编代码

    可以看到,反汇编代码里没有test()的调用,而是直接 movl  $0x2, %esi,这时候编译器会认为函数体test()里面的内容过于简单,直接就不调用了,直接优化,将结果2返回。

    上面的两种情况的对比:C函数在编译的时候就已经确定了,而OC方法只有在运行时才确定,所以在编译的时候C函数可以被优化,OC方法不行。

    相关文章

      网友评论

          本文标题:结合汇编谈谈xcode编译器优化

          本文链接:https://www.haomeiwen.com/subject/usitlxtx.html