2014-10-09 2 views
1

저는 Borland C++ Builder 2009를 사용하여 32 비트 실행 파일을 작성합니다.32 비트 코드에서 64 비트 변수를 사용하여 성능 저하가 발생합니다.

는 내가 64 비트 변수에 (적어도) 거의 모든 개체 중 하나 개 변수를 변경해야하기 때문에 내 코드의 거대한 부분을 변경해야합니다, 그것은

동안 등을 계산에 많이 사용된다 이 작업을 수행 할 때 종종 64 비트 값을 사용하는 특정 함수는 필요하지 않으며 절대 필요하지 않습니다 (예 : 버퍼 크기 제한 또는 DWORD 경계를 초과 할 수없는 하위 범위 만 사용). .) 그래서 나는이 루틴을 잘 바꾸어야하는지 아닌지 궁금하다.

또는 64 비트 변수 입력을 사용하는 함수에서 다른 함수 범위 변수를 64 비트로 변경하거나 그대로 두십시오.

32 비트 응용 프로그램이 실제로 64 비트 변수를 사용하는지 여부가 궁금합니다. 이것이 중요하거나 완전히 관련이 없다면? 전의 경우 예를 들어 가능한 경우 DWORD 값을 유지하려고합니다.

+4

이 질문은 요구 사항, 아키텍처 및 리팩토링에 관한 내용이므로 http://programmers.stackexchange.com/ –

답변

4

일반적으로 레지스터보다 큰 값을 조작하면 더 많은 CPU 사이클이 필요하므로 성능에 큰 영향을 줄 수 있지만 어쨌든 프로필해야하는 경우 관련성이 있는지 확인해야합니다.

+0

에 영향을 미치기 때문에 자신이하지 않는 한 논점이 아닌 것 같습니다. 무거운 정수 - 산술 및 단지 그의 정수 - 크기를 배가. 과장을 제외하고, 좋다. – Deduplicator

+0

소프트웨어의 성능 (사용자 경험)에 눈에 띄는 영향을 미치지 않을 수도 있지만 실현 가능성에 대해 이해하는 것이 좋습니다. 실제로 비용이 있다는 것을 이해하는 것이 좋습니다. – Peter

1

"많은 계산"은 정확히 무엇입니까? 수초에 걸친 백개의 계산, 또는 무한 루프의 무겁고 거대한 행렬 연산? 64 비트 산술 가산 및 빼기는 유사한 32 비트 연산과 비교하여 계산 시간이 두 배가됩니다. 곱셈은 ​​상대적으로 조금 비싸고 부서는 훨씬 더 비쌉니다.

크기가 다르거 나 다른 부호가있는 정수 간의 할당 및 산술은 일반적으로 정밀도가 떨어지거나 (예기치 않은) 부호 확장 확장이 손실 될 수 있음에도 불구하고 일반적으로 투명하게 지원됩니다. 작업을 쉽게 할 수있는 동일한 투명성으로 인해 약간의 애매한 문제가 발생할 수도 있습니다.

2G (또는 4G)보다 훨씬 높은 값을 나타 내기 때문에 64 비트 변수가 필요하다고 가정합니다. 그렇게하면 절대로 32 비트 (또는 더 짧은) 변수에 할당하지 마십시오. 문제가 발생할 수 있다고 생각되면, 관련된 모든 변수 또는 특성을 변경하거나 어설 션을 사용하여 우발적 인 정밀도 손실을 방지해야합니다.

부호가있는 변수와 부호없는 변수를 함께 사용하지 않는다면 짧은 값보다 큰 값은 항상 확인해야합니다.

연산자 오버로드 나 템플릿 및 템플릿 인스턴스화와 같은 언어 기능에는 특별한 고려 사항이 필요할 수 있습니다.

+0

나는 더 넓은 범위의 과제를 통제 할 수 있다고 생각한다. 대개 서명되지 않은 변수를 처리하지만, int (32 비트)를 부호있는 __int64로 변환해야하는 경우와 int가 음수 인 경우 64 비트 int에서 동일한 음수 값으로 올바르게 변환되지 않습니까? – Peter

관련 문제