ゆとりーなの日記

日記的な事を書いて行くと思はれる

コンパイラ対人間パート弐

もう一つ忘れ去られた予約語がありました。

registerは忘れられた子

今時のコンパイラはregisterを無視するどころか最適化を阻害するという噂が流れていますが、一昨日のノリで調べてみました。
以下比較ソース

// registerあり
#include <stdio.h>
int main() {
	for (register int i = 0; i < 10; ++i) {
		printf("C++かわいいよC++");
	}
	return 0;
}

// registerなし
#include <stdio.h>
int main() {
	for (int i = 0; i < 10; ++i) {
		printf("C++かわいいよC++");
	}
	return 0;
}

比較アセンブラ

// registerあり
push	esi
mov	esi, DWORD PTR __imp__printf
push	edi
mov	edi, 10
npad	3
$LL3@main:
push	OFFSET ??_C@_0BB@GDHFLPKJ@C?$CL?$CL?$IC?$KJ?$IC?m?$IC?$KC?$IC?$KC?$IC?fC?$CL?$CL?$AA@
call	esi
add	esp, 4
sub	edi, 1
jne	SHORT $LL3@main
pop	edi
xor	eax, eax
pop	esi
ret	0

// registerなし
push	esi
mov	esi, DWORD PTR __imp__printf
push	edi
mov	edi, 10				
npad	3
$LL3@main:
push	OFFSET ??_C@_0BB@GDHFLPKJ@C?$CL?$CL?$IC?$KJ?$IC?m?$IC?$KC?$IC?$KC?$IC?fC?$CL?$CL?$AA@
call	esi
add	esp, 4
sub	edi, 1
jne	SHORT $LL3@main
pop	edi
xor	eax, eax
pop	esi
ret	0

うむ。変わりませんね。