2012-07-27 6 views
6

C++에서 int를 long으로 사용하면 어떤 이점이 있습니까?C++ int 대 long

x86 및 x86_64 아키텍처 (x86에서는 32 비트, x86_64에서는 64 비트, int는 32 비트 모두)의 기본 워드 크기는 길어서 이론적으로는 산술을 할 때 더 빨라야합니다.

C++ 표준은 sizeof (int) < = sizeof (long)을 보장하지만 32 비트 및 64 비트 시스템에서는 기본 크기가 너무 길기 때문에 가능한 경우 int 대신 사용해야합니다. 두 아키텍처 모두에서 이식 가능한 코드를 작성하려고 할 때?

+1

Windows에서 'long'은 32 비트입니다. Linux에서 'long'은 64 비트입니다. 그것은 많은 응용 프로그램을 파괴합니다. – Mysticial

+0

관련 : [int와 C ​​++의 차이점은 무엇입니까?] (http://stackoverflow.com/q/271076/11343) – CharlesB

답변

1

더 빠르고 무엇이 아닌지는 매일 예측하기가 어려워지는 것입니다. 그 이유는 프로세서가 더 이상 "단순하지"않으며 그 뒤에있는 모든 복잡한 역학 및 알고리즘으로 인해 최종 속도는 완전히 반 직관적 인 규칙을 따를 수 있기 때문입니다.

유일한 방법은 측정하고 결정하는 것입니다. 또한 더 빠른 것은 작은 세부 사항에 달려 있으며, 호환되는 CPU의 경우에도 최적화가 무엇인지는 다른 것에 대한 염려가 될 수 있습니다. 매우 중요한 부분의 경우 일부 소프트웨어는 프로그램 초기화 중 런타임에 다른 접근 방식에 대한 타이밍을 확인하고 검사합니다.

즉, 일반적으로 더 빠른 정수는 int입니다. 특별히 필요하면 다른 정수를 사용해야합니다 (예 : long이 더 크고 더 높은 정밀도가 필요하거나 short이 작지만 충분하지만 메모리를 절약해야하는 경우).

특정 크기가 필요한 경우 고정 표준 유형을 사용하거나 long 주위에 단지 뿌리는 대신 typedef을 추가하십시오. 이 방법을 사용하면 다른 컴파일러와 아키텍처를 지원하는 것이 더 쉬울 것이며 향후에 코드를 읽는 사람이 누구에게나 명확한 의도가 될 것입니다.

5

long은 최소 32 비트가 보장되지만, int은 최소 16 비트 만이 보장됩니다. 완전 휴대용 프로그램을 작성할 때 int의 보증 된 크기로는 충분하지 않은 long을 사용할 수 있습니다.

실제로 많은 사람들은 int이 이러한 플랫폼만을 대상으로하므로 표준 보증보다 더 큰 것으로 암시 적으로 가정합니다. 이러한 상황에서는 일반적으로별로 중요하지 않습니다.

int은 시스템의 "자연적인"크기 여야합니다. 이론적으로는 long은 더 비싸지 만 많은 아키텍처에서 long에 대한 연산은 long이 실제로는 int보다 긴 경우에도 더 비싸지 않습니다.

4

다른 플랫폼에서 같은 크기로 유지되는 정수 유형이 필요한 경우 <stdint.h>에 유형을 지정해야합니다.

예를 들어 절대적으로 32 비트 부호없는 정수가 필요한 경우 uint32_t이 필요합니다. 64 비트 부호있는 정수가 절대적으로 필요한 경우 int64_t이 필요합니다.

+0

동의 함. 그러나'xintX_t' 타입은되도록 적게 사용하십시오.코드가 덜 용인 CPU 아키텍처로 이식되면 성능에 심각한 영향을 줄 수 있습니다. – wallyk

+0

@wallyk : 더 이상 존재하지 않는 유형의 크기에 대한 가정으로 인해 버그가 발생하는 것은 당연한 일이기 때문에 버그 코드로 인해 성능이 저하 될 수 있습니다. (물론 코드가 크기에 대해 더 많은 가정을해서는 안됩니다. 그런 다음 표준에 의해 보장되는 유형이지만 여전히 충분히 자주 발생합니다) – Grizzly