toge's diary

コンピュータ関連の趣味をつらつらと。

配列 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 配列の後始末部分で呼ぶ関数が違っている部分の勝負になったりしそうなので、「ほぼ同じ」で良いと思います。時間がとれたら実際に計測してみます。