gpt4 book ai didi

C++ 做内联函数防止复制?

转载 作者:太空狗 更新时间:2023-10-29 20:28:14 27 4
gpt4 key购买 nike

假设编译器确实内联 foo 这两个语句之间是否存在性能差异?

inline int foo (int val) {
return val;
}

int main () {

std::cout << foo(123) << std::endl;

std::cout << 123 << std::endl;

return 0;
}

让我们忽略移动语义和复制省略可能产生的任何影响。

最佳答案

我的编译器 (gcc 4.7.2) 为这两个语句生成几乎相同的代码:

_main:
LFB1018:
pushq %rbx
LCFI0:
movq __ZSt4cout@GOTPCREL(%rip), %rbx

; std::cout << foo(123) << std::endl;
movl $123, %esi
movq %rbx, %rdi
call __ZNSolsEi
movq %rax, %rdi
call __ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_

; std::cout << 123 << std::endl;
movq %rbx, %rdi
movl $123, %esi
call __ZNSolsEi
movq %rax, %rdi
call __ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_

xorl %eax, %eax
popq %rbx
LCFI1:
ret

唯一的区别是前两条指令的顺序。我已经试验过了,这种差异似乎与 foo() 没有任何关系:如果我将这两行重复两次,则只有四个语句中的最后一个具有指令顺序逆转。这让我觉得这个工件可能与管道优化器或类似性质的东西有关。

关于C++ 做内联函数防止复制?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13807098/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com