当内联函数被执行时,它们将使用哪个内存区域int sum(int a,int B){return a+b;}变量a和b存储在哪里?
rhfm7lfc1#
很可能根本不使用内存。如果sum()的参数在“调用”时在寄存器中,那么它们将被简单地相加,并将总和放入另一个寄存器中,或者如果之后不需要内容,则放入其中一个寄存器中。例如:
sum()
inline int sum(int a,int b) { return a + b; } int main(int argc, char **argv) { (void)argv; int a = argc; int b = a * 5; return sum(a, b); }
编译为:
_main: ; @main .cfi_startproc ; %bb.0: add w8, w0, w0, lsl #1 lsl w0, w8, #1 ret .cfi_endproc
都是在寄存器中完成的。内存中没有存储任何内容。(优化器是相加而不是相乘。)
1条答案
按热度按时间rhfm7lfc1#
很可能根本不使用内存。如果
sum()
的参数在“调用”时在寄存器中,那么它们将被简单地相加,并将总和放入另一个寄存器中,或者如果之后不需要内容,则放入其中一个寄存器中。例如:
编译为:
都是在寄存器中完成的。内存中没有存储任何内容。(优化器是相加而不是相乘。)