如果函数接受大量参数或单个结构,在性能方面会有差异吗?

Is there a difference in terms of performance if a function accepts a ton of parameters or a single struct?

如果函数接受大量参数或单个结构,在性能(编译器优化,例如内联、L2 未命中)方面的主要区别是什么?

示例(在Visual Studio中的一些C代码中使用)

void OnMessage(const char * senderId, const int & senderIdLength, const char * topic, const int & topicLength, const void * data, const int & dataLength);

每个参数都需要存储在某个地方(通常在堆栈上,或者在进程寄存器中)。这些商店中的每一个都需要一些时间。然后是按值传递变量所需的差异。如果你有一个大小为 100 字节的结构并且你通过引用传递结构你只需要传递地址(通常是 4 或 8 个字节)。如果按值传递,则必须复制 100 个字节(到堆栈)。编译器会尽力优化堆栈和寄存器的使用。随着时间的推移,内存地址被引用的频率对 L2 未命中的影响最大。如果您的函数非常重要,您可能会在其中花费比调用它更多的时间(缓存的使用将在很大程度上取决于函数的作用)。如果它是微不足道的,那么编译器可能会很好地符合它。