64 비트 컴퓨터에서 64 비트 대신 32 비트 소프트웨어를 실행해야 할 이유가 있습니까? 64 비트 하드웨어에서 최신 64

최신 데스크톱 컴퓨터를 대상으로 64 비트 하드웨어에서 최신 64 비트 운영 체제를 실행하는 소프트웨어의 64 비트 버전과 함께 32 비트 버전을 제공해야 할 이유가 있습니까?

64 비트 소프트웨어가 더 효율적이고 필요한 경우 더 높은 메모리 사용을 허용하는 것처럼 보입니다. Apple은 1-2GB의 RAM 만 있어도 4GB 이하의 전화에도 64 비트 프로세서를 사용합니다. 32 비트 CPU에 대한 제한.



답변

64 비트 환경에서 32 비트 소프트웨어의 이점

  • 메모리 사용량이 적으며, 특히 포인터가 많은 응용 프로그램에서 64 비트와 32 비트는 메모리 요구 사항을 쉽게 두 배로 늘릴 수 있습니다.
  • 객체 파일도 더 작습니다.
  • 32 비트 환경과의 호환성
  • 메모리 누수는 2GB, 3GB 또는 4GB로 하드 캡핑되어 전체 시스템을 습격하지 않습니다.

64 비트 환경에서 32 비트 소프트웨어의 단점

  • 프로세스 당 2GB, 3GB 또는 4GB 메모리 제한 (복합의 32 비트 프로세스는 사용 가능한 시스템 메모리를 모두 사용할 수 있습니다.)
  • x64에 따라 추가 레지스터 및 명령어 세트 확장을 사용하지 않습니다. 이것은 컴파일러와 CPU에 따라 다릅니다.
  • 32 비트 버전의 모든 (대부분의 Linux 배포) 또는 흔하지 않은 (대부분의 Windows 버전) 라이브러리 및 런타임 환경이 필요할 수 있습니다. 32 비트 버전의 공유 라이브러리가 응용 프로그램 전용으로로드 된 경우 사용자 공간을 차지합니다. 정적으로 연결하는 경우 아무런 차이가 없습니다.

다른 측면들

  • 드라이버는 일반적으로 문제가되지 않습니다. 커널 모듈의 API가 아닌 32 비트와 64 비트 사이에는 사용자 공간 라이브러리 만 달라야합니다.
  • 정수 데이터 유형에 대해 다른 기본 너비를주의하십시오. 추가 테스트가 필요합니다.
  • 64 비트 CPU 아키텍처는 32 비트를 전혀 지원하지 않을 수도 있습니다.
  • 실제 메모리보다 훨씬 큰 주소 공간에 따른 ASLR 및 기타 기술과 같은 특정 기술 은 32 비트 실행 모드에서 제대로 작동하지 않습니다.

매우 구체적인 CPU 아키텍처, 운영 체제 및 라이브러리 인프라를 비교하지 않으면 자세한 내용을 알 수 없습니다.


답변

32 비트 소프트웨어와 64 비트 소프트웨어의 차이점은 포인터의 크기와 정수 레지스터의 크기입니다. 그게 다야.

이는 프로그램의 모든 포인터가 두 배 크기임을 의미합니다. 그리고 (적어도 ILP32 / LP64 아키텍처에서는) long크기도 두 배입니다. 이는 일반적으로 객체 코드 크기가 약 30 % 증가합니다. 이것은…

  • 디스크에서 RAM으로로드하는 데 객체 코드가 ~ 30 % 더 오래 걸립니다
  • 객체 코드는 메모리에서 ~ 30 % 더 많은 공간을 차지합니다
  • 객체 코드의 경우 메모리 대역폭을 효과적으로 20 % 줄였습니다.
  • 명령 캐시 크기를 효과적으로 20 % 줄였습니다.

이것은 성능에 무시할 수없는 부정적인 영향을 미칩니다.

이렇게하면 성능 비용을 “구매”할 수있는 경우에만 의미가 있습니다. 기본적으로이 작업을 수행하는 방법에는 두 가지가 있습니다. 64 비트 정수 연산을 많이 수행하거나 4GB 이상의 매핑 된 메모리가 필요합니다. 이들 중 하나 또는 둘 다에 해당되는 경우 64 비트 소프트웨어를 사용하는 것이 좋습니다. 그렇지 않으면 그렇지 않습니다.

참고 : 해당 32 또는 64 비트 변형이없는 아키텍처가 있습니다. 이 경우 질문은 분명히 이해가되지 않습니다. 가장 잘 알려진 것은 64 비트이고 32 비트 변형이없는 IA64와 x86 / AMD64는 서로 다른 아키텍처 이지만 밀접하게 관련되어 있지만 x86은 32 비트이며 AMD64는 64 비트입니다.

실제로, 그 후자의 진술은 더 이상 100 % 사실이 아닙니다. Linux는 최근 x32 ABI를 추가하여 32 비트 포인터로 AMD64 코드를 실행할 수있게했는데, 이것이 “적절한”CPU 아키텍처가 아니더라도, 네이티브가있는 것처럼 AMD64 아키텍처를 사용하는 방법입니다 32 비트 변형. 이 정확하게 이루어졌다 때문에 제가 위에서 언급 한 성능 오버 헤드가 발생시킨 실제 실제 시스템에서 실제 코드를 실행하는 실제 사용자를위한 측정, 정량화 문제.


답변

소프트웨어가 레거시 시스템, 드라이버 또는 라이브러리와 직접 인터페이스해야하는 경우 AFAIK OS (일반적으로 Windows 및 Linux AFAIK)에서 64 비트와 32 비트를 혼합 할 수 없으므로 32 비트 버전을 제공해야 할 수도 있습니다. 프로세스 내의 비트 코드

예를 들어, 소프트웨어가 특수 하드웨어에 액세스해야하는 경우 고객이 32 비트 드라이버 만 사용할 수있는 구형 모델을 운영하는 것은 드문 일이 아닙니다.


답변

소프트웨어가 DLL 인 경우 32 비트 및 64 비트 버전을 모두 제공 해야 합니다. 고객이 32 비트 또는 64 비트 소프트웨어를 사용하여 DLL과 통신하는지 여부는 알 수 없으며 DLL은 응용 프로그램과 동일한 비트 길이를 사용해야합니다. 협상 할 수 없습니다.

소프트웨어가 독립 실행 형 실행 파일이면 덜 명확합니다. 구형 OS에서 소프트웨어를 실행할 필요가없는 경우 32 비트 버전을 제공하지 않아도됩니다. 64 비트 만 사용하고 64 비트 OS가 필요하고 작업이 완료되도록 지정하십시오.

그러나 이전 OS에서 소프트웨어를 실행해야하는 경우 에는 64 비트 버전을 제공하고 싶지 않을 수 있습니다 . 두 가지 버전이있는 경우 테스트가 두 배가되며 다양한 OS 버전 및 언어에서 소프트웨어를 올바르게 테스트하는 것은 빠른 과정이 아닙니다. 32 비트 소프트웨어는 64 비트 플랫폼에서 완벽하게 실행되므로, 특히 소규모 개발자가 소프트웨어를 32 비트로 만 릴리스하는 것이 일반적입니다.

또한 대부분의 모바일은 32 비트입니다. 아마도 일부 고급 제품은 64 비트 일지 모르지만 그 단계를 밟을만한 이유는 거의 없습니다. 따라서 크로스 플랫폼을 개발 중이고 코드가 Android에서도 실행되도록하려면 32 비트를 유지하는 것이 안전합니다.