自编教材实操课程分享:第六章—传参优化
先进编译实验室
2024年06月06日 08:00
收录于文集
共28篇


本文主要介绍传参优化。实验环境是CentOS7 + GCC。

1. 优化方法简述

函数参数的传递通常是通过寄存器或者栈等方式进行的。而向函数传递的参数越多,开销就越大。这是因为当参数数量增多时,需要在函数调用时将这些参数存储到寄存器中或者压入栈内,这会增加函数调用的开销。因此,当函数的参数较多时,为解决参数传递较多的问题,可以将函数的参数组合成一个结构体指针。

2. 示例分析

当函数的参数较多时,为了减少传递参数的开销,可以将函数的参数组合成结构体指针。左边给出了示例优化前代码paramTrans1.cpp,右边给出了示例优化后代码paramTrans2.cpp。

 

编译运行命令:

(1)gcc paramTrans1.cpp -o paramTrans1

(2)./paramTrans1

(3)gcc paramTrans2.cpp -o paramTrans2

(4)./paramTrans2

 

优化前后,代码的执行结果都是正确的,但优化后代码的执行时间要比优化前代码的执行时间短。因此,将函数的参数组合成一个结构体指针,可以在一定程度上缩短程序的执行时间。

汇编代码生成命令:

(1)gcc -S paramTrans1.cpp -o paramTrans1.s

(2)gcc -S paramTrans2.cpp -o paramTrans2.s

 

3. 总结

函数参数的传递通常是通过寄存器或者栈等方式进行的。而向函数传递的参数越多,开销就越大。当函数的参数较多时,为解决参数传递较多的问题,可以将函数的参数组合成一个结构体指针。

4. 参考资料

(1)(1 封私信) 在函数中需要用到大量参数时如何传参可以更简洁合理? - 知乎 (zhihu.com)

(2)C++对传参和传返回值时的优化处理_c 传参 优化-CSDN博客