配列 vs Vector 尻拭い
id:shinichiro_hさんの指摘通りC++のソース自体にミスがありました。
修正したソースコードより生成される配列版のコードは以下の通りです。
_Z12search_arrayi: pushl %ebp movl %esp, %ebp pushl %esi pushl %ebx subl $16, %esp movl 8(%ebp), %esi movl $4000, (%esp) call _Znaj movl %eax, %ebx movl %eax, %ecx leal 3996(%eax), %eax movl %ebx, %edx .L2: addl $4, %ecx movl $0, (%edx) addl $4, %edx cmpl %eax, %ecx jle .L2 xorl %ecx, %ecx xorl %eax, %eax movl %ebx, %edx .L4: cmpl %esi, (%edx) jne .L5 movl %eax, %esi .L7: testl %ebx, %ebx je .L9 movl %ebx, (%esp) call _ZdaPv .L9: addl $16, %esp movl %esi, %eax popl %ebx popl %esi leave ret .L5: incl %ecx incl %eax addl $4, %edx cmpl $999, %ecx jle .L4 movl $-1, %esi jmp .L7
うーん、微妙に一致しない・・・、けどそこは1clockに命を削ったりしない、大人の度量ってことで見なかったふりです。
コンテナ or 配列の後始末部分で呼ぶ関数が違っている部分の勝負になったりしそうなので、「ほぼ同じ」で良いと思います。時間がとれたら実際に計測してみます。