我对计算机图形学了解不多,但这个简单的测试表明,对于 TEXTURE_COUNT=1 和 -O1,g++ 没有分支。我怀疑这甚至会延伸到许多现实生活中的程序,但你为什么不自己尝试一下。使用-S 查看生成的程序集。
#include <stdio.h>
typedef struct fake_texture
{
int r, g, b;
} texture;
int main()
{
texture array[TEXTURE_COUNT] = {};
for(int i = 0; i < TEXTURE_COUNT; i++)
{
array[i].r += 1;
array[i].g += 2;
array[i].b += 3;
}
for(int i = 0; i < TEXTURE_COUNT; i++)
{
printf("%d\n", array[i].r);
}
}
x86 汇编摘录:
main:
.LFB31:
.cfi_startproc
.cfi_personality 0x0,__gxx_personality_v0
pushl %ebp
.cfi_def_cfa_offset 8
movl %esp, %ebp
.cfi_offset 5, -8
.cfi_def_cfa_register 5
andl $-16, %esp
subl $32, %esp
movl $1, 20(%esp)
movl $2, 24(%esp)
movl $3, 28(%esp)
movl $1, 8(%esp)
movl $.LC0, 4(%esp)
movl $1, (%esp)
call __printf_chk
movl $0, %eax
leave
ret
.cfi_endproc