小编Max*_*ner的帖子

为什么这个未使用的变量没有被优化掉?

我玩过Godbolt的CompilerExplorer.我想看看某些优化是多么好.我的最低工作范例是:

#include <vector>

int foo() {
    std::vector<int> v {1, 2, 3, 4, 5};
    return v[4];
}
Run Code Online (Sandbox Code Playgroud)

生成的汇编程序(通过clang 5.0.0,-O2 -std = c ++ 14):

foo(): # @foo()
  push rax
  mov edi, 20
  call operator new(unsigned long)
  mov rdi, rax
  call operator delete(void*)
  mov eax, 5
  pop rcx
  ret
Run Code Online (Sandbox Code Playgroud)

可以看出,clang知道答案,但在返回之前会做很多事情.在我看来,即使是矢量也是由于"operator new/delete"而创建的.

任何人都可以向我解释这里发生了什么以及它为什么不回归?

GCC生成的代码(此处未复制)似乎明确构造了向量.有谁知道海湾合作委员会无法推断出结果?

c++ gcc clang compiler-optimization

38
推荐指数
2
解决办法
3076
查看次数

标签 统计

c++ ×1

clang ×1

compiler-optimization ×1

gcc ×1