为什么 clang 的 `-O3` 分配比 g++ 快 2 倍?基于简单的 alloca 基准
在底部得到了一些基准之前的一个问题。 clang 显然在 -O3 优化器配置文件中有更好的实现。什么给? clang 是否有偷工减料?另外,由于 clang 是一个现代编译器,它的 alloca
实现中是否有任何安全性或其他有趣的属性?
On the use and abuse of alloca
Got some benchmarks at the bottom of a previous question. clang clearly has a better implementation in the -O3
optimizer profile. What gives? Is clang cutting any corners? Also, since clang is a modern compiler, are there any safeties or other interesting properties in its alloca
implementation?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
德尔南的猜测是正确的。但他没有考虑到测试非常糟糕,clang 可以从
alloca_test
优化实际的alloca
操作。alloca_test
只有 llvm ir 操作 alloca,但没有alloca()
函数调用:与
malloc_test
比较:即使使用
-O1 在
alloca_test
中不再有分配:对于
malloc_test
,malloc 调用仍然在这里:我还应该说
g++ -O3
(测试过的 4.1 和 4.5.2)不会优化堆栈大小的变化(分配主效应)。Guess by delnan is true. But he didn't account that test is very bad, and clang can to optimize out actual
alloca
operation fromalloca_test
.alloca_test
have only llvm ir operation alloca, but noalloca()
function call:Compare with
malloc_test
:Even with
-O1
there is no more alloca inalloca_test
:And for
malloc_test
, malloc call is still here:I should also say that
g++ -O3
(tested 4.1 and 4.5.2) doesn't optimize out changing size of stack (alloca main effect).