내가 작성한 코드 스 니펫을보고 있었는데 movsxd
연산은 ret
변수가 32 비트 인 경우에만 나타납니다. ret
이 64 비트이면 직접 사용됩니다 : mov BYTE PTR [rdi+rbp+86], al
. mov
연산 이후C에서 64 비트 플랫폼을 타겟팅 할 때 배열 참조에 64 비트 변수를 사용하는 것이 더 좋습니까?
; 861 : _BitScanForward(&depth, subject);
movsx edx, dx
; 862 : qry_args->lo_refs[++ret] = (BYTE)depth;
inc ebp // ret is in ebp
bsf ecx, edx
movsxd rax, ebp // convert 32-bit ebp to 64-bit rax
; 865 : subject ^= (1 << depth);
; 866 : nulls_mask.lo |= (1 << depth);
movsx r9d, r9w
btc edx, ecx
bts r9d, ecx
mov BYTE PTR [rax+rbx+86], cl // 64-bit rax used by mov
64 비트 레지스터 64 비트 모드에서, 그것은 (예를 들면 어레이 referencers 같은) 메모리를 참조하는 데 사용되는 임의의 변수에 이상적으로는 64 비트이어야 나에게 의미가 필요하다.
그러나 나는 2 ^^ 31 반복을 초과하지 않을 루프에서 단순히 int
을 사용하는 것이 일반적이라는 것을 알고 있습니다. 실제로 long long
(int64
)을 64 비트 코드의 모범 사례로 사용해야합니까? 이것에 대한 의견?
여기에 표시된 것 이상으로 이것을 테스트하는 데 문제가 없습니다.
ps. 이것은 미세 최적화 질문이 아닙니다. 그것은 형태의 문제입니다. 나에게는 컴파일러에서 사용하는 유형을 사용하는 것이 좋습니다.
정보 : 최대 최적화가 적용된 VS 2016으로 컴파일 중입니다.
"_ 셀 참조 포인터와 같은 메모리를 참조하는 데 사용되는 _variables는 쓰기 포인터이며 따라서 64 비트 메모리 구성에서 64 비트가되어야합니다. 'int'는 기계 레지스터의 네이티브 크기입니다. –
'int'는 4 바이트입니다. https://msdn.microsoft.com/en-us/library/9c3yd98k.aspx https://www.google.com.tw/webhp#q=size%20of%20int%20in%20c – IamIC