Chapter 18 Runtime Environment

2020-03-02  本文已影响0人  再凌

C语言转化为汇编语言

1. 初始化static变量
2. 函数

函数部分分成三层: 前置操作,内容主题和清理操作。前之操作负责开辟内存(例如栈)。首先link将栈和函数挂钩,然后存储一些信息----使用了哪些寄存器。
变量声明不会产生任何语句,除非初始化了。
如果寄存器数量不够的时候,后续变量就只能被放入内存中(有一个寄存器存放了指向这些地址的指针)
清理操作负责清理栈等内容

3. 函数调用

首先会根据调用的函数的需要的参数的逆序将参数放入栈中,即使传入了额外参数,被调用函数也不会使用。(反之,如果多传入了参数,那么被调用函数将错误接受参数)

4. 函数返回

首先将所有之前保存的栈都恢复出来,如果calling函数有赋值的话,则从寄存器中取出 return 的值

C语言调用汇编的注意事项

  1. 保存所有的寄存器内容
  2. 将需要传入的参数逆序压栈
  3. 如果汇编要返回值,应当放入某个临时寄存器
  4. return 之前,清空所有栈

调优

使用profile程序观察每一个函数总使用时长和被调用次数,找到最容易优化的部分。
小函数但是被调用多次的可以考虑使用汇编重构,因为汇编没有那么多的 prologue 和 epilogue

上一篇下一篇

猜你喜欢

热点阅读