是否有gcc编译指示或我可以用来强制gcc在特定代码段上生成无分支指令?
我有一段代码,我希望gcc使用cmov指令编译成无分支代码:
int foo(int *a, int n, int x) {
int i = 0, j = n;
while (i < n) {
#ifdef PREFETCH
__builtin_prefetch(a+16*i + 15);
#endif /* PREFETCH */
j = (x <= a[i]) ? i : j;
i = (x <= a[i]) ? 2*i + 1 : 2*i + 2;
}
return j;
}
Run Code Online (Sandbox Code Playgroud)
事实上,它确实如此:
morin@soprano$ gcc -O4 -S -c test.c -o -
.file "test.c"
.text
.p2align 4,,15
.globl foo
.type foo, @function
foo:
.LFB0:
.cfi_startproc
testl …Run Code Online (Sandbox Code Playgroud) 有没有人见过STL的实现,其中stl :: set 没有实现为红黑树?
我问的原因是,在我的实验中,B-2B树的性能优于stl :: set(和其他红黑树实现)2到4倍,具体取决于B的值.我很好奇,如果有的话当似乎有更快的数据结构可用时,使用红黑树的一个令人信服的理由.