提供以下功能:
void rec_func(int a, int b, const int c) {
/*
flow control and stuff here
*/
rec_func(a - 1, b, c);
}
gcc是否会为所有递归调用理解c是相同的常量值,然后将对所有调用使用相同的变量,否则它将在每次调用中将c的值复制到新的c变量?
对于b的相同问题,即使未标记为const,gcc也会理解为隐式const吗?
我的[[猜测是您从优化的角度出发。
如果是这种情况:b
或c
,则编译器可能
int
不太可能是个大问题。如果要传递一个巨大的结构,则可以考虑使用指针或引用。 无论如何,您都可以看到GCC将使用出色的godbolt工具做什么。但是正如我在评论中说的那样,不清楚您提出这个问题的动机是什么,所以我的回答可能会很遥远。
[*]不是
您
!a
,b
和c
的地址,似乎在每个子调用中为每个参数创建了一个新变量:https://www.onlinegdb.com/Sy2AzZzN8
------------
New CALL
------------
Address of a : 6 46a0eb8c
Address of b : 8 46a0eb88
Address of c : 10 46a0eb84
------------
New CALL
------------
Address of a : 5 46a0eb6c
Address of b : 8 46a0eb68
Address of c : 10 46a0eb64 != 46a0eb84
我认为这很正常,因为每个函数都将参数定义为局部变量(在调用结束时不再存在。)>