32 비트 대 64 비트 시스템


219

32 비트와 64 비트 시스템의 차이점은 무엇입니까?

둘 다 사용했다면 어떤 차이가 있습니까?

경우에 따라 64 비트 시스템에서 32 비트 프로그램을 사용하는 것이 문제가됩니까?


여기에는 많은 혼란이 있으며, 웹에서 물리적 주소 지정 (RAM 액세스)과 PEA (PEA)가이 문제에 영향을 미치고 마더 보드가이 문제에 영향을 미치고 논리적 주소 지정 (프로세스 당 가상 메모리)간에 차이점이 있습니다. 32 비트 OS에서 가상 메모리는 4GB에서 커널 예약을 뺀 값으로 제한됩니다. RAM과 독립적으로 0.1MB 또는 8GB RAM을 사용할 수 있으며 정확히 4GB의 가상 메모리를 갖습니다 (그러나 일부는 커널에 의해 예약 됨). PEA는 더 많은 RAM을 사용할 수 있지만 커널이 모든 것을 액세스 할 수 없기 때문에 완벽한 대답은 아닙니다.
ctrl-alt-delor

답변:


262

참고 :이 대답은 표준 x86 기반 PC CPU (Intel 및 AMD) 및 Windows (일반적으로 최종 사용자 용으로 구성)에 적용됩니다. 다른 32 비트 또는 64 비트 칩, 다른 OS 및 기타 OS 구성은 서로 다른 단점을 가질 수 있습니다.

기술적 관점에서 볼 때 64 비트 OS는 다음과 같은 이점을 제공합니다.

  • 개별 프로세스가 4GB 이상의 RAM을 처리 할 수 ​​있습니다. 실제로 모든 32 비트 OS가 아니지만 대부분은 사용 가능한 총 시스템 RAM을 애플리케이션 당 최대 용량이 아닌 4GB 미만으로 제한합니다.

  • 모든 포인터는 4 바이트 대신 8 바이트를 사용합니다. RAM 사용에 미치는 영향은 최소화됩니다 (응용 프로그램에 기가 바이트로 채워질 가능성이 없으므로). 그러나 최악의 이론적 인 경우 CPU 캐시가 포인터를 1/2만큼 유지할 수 있습니다 그것은 실제로 크기의 1/2 일 것입니다). 대부분의 어플리케이션에서, 이것은 큰 문제가 아닙니다.

  • 64 비트 모드에는 더 많은 범용 CPU 레지스터가 있습니다. 레지스터는 전체 시스템에서 가장 빠른 메모리입니다. 64 비트 모드에서는 32 비트 모드에서 8 개와 16 개의 범용 레지스터 만 있습니다. 필자가 작성한 과학 컴퓨팅 응용 프로그램에서는 64 비트 모드로 다시 컴파일하여 최대 30 %의 성능 향상을 보았습니다 (응용 프로그램에서 실제로 추가 레지스터를 사용할 수 있음).

  • 대부분의 32 비트 OS는 실제로 4GB가 설치되어 있어도 개별 응용 프로그램이 2GB의 RAM 만 사용하도록합니다. 이는 다른 2GB의 주소 공간이 응용 프로그램과 OS간에 데이터를 공유하고 드라이버와 통신하기 위해 예약되어 있기 때문입니다. Windows 및 Linux에서는 응용 프로그램과 3GB 공유에 대해이 절충안을 조정할 수 있지만 변경을 예상하지 않는 일부 응용 프로그램에서는 문제가 발생할 수 있습니다. 또한 RAM이 1GB 인 그래픽 카드가 손상 될 수도 있습니다 (그러나 확실하지 않습니다). 64 비트 OS는 개별 32 비트 응용 프로그램을 전체 4GB에 더 가깝게 사용할 수 있습니다.

사용자 관점에서 :

  • 응용 프로그램 속도는 일반적으로 64 비트 OS의 64 비트 응용 프로그램이 32 비트 OS의 32 비트 응용 프로그램과 비교할 때 빠르지 만 대부분의 사용자는이 속도 향상을 볼 수 없습니다. 일반 사용자를위한 대부분의 응용 프로그램은 실제로 여분의 레지스터를 활용하지 않거나 캐시를 가득 채우는 더 큰 포인터로 이점을 균형있게 처리합니다.

  • 사진 편집자, 비디오 프로세싱, 과학 계산 등과 같은 메모리 호그 응용 프로그램이있는 경우 3GB 이상의 RAM이 있고 응용 프로그램의 64 비트 버전을 얻을 수있는 경우 (또는 구매할 수있는 경우) 선택이 쉽습니다 : 64 비트 OS를 사용하십시오.

  • 일부 하드웨어에는 64 비트 드라이버가 없습니다. 스위치를 만들기 전에 마더 보드, 모든 플러그인 카드 및 모든 USB 장치를 확인하십시오. Windows Vista 초기에는 드라이버에 많은 문제가있었습니다. 요즘 상황이 일반적으로 좋습니다.

  • RAM이 부족한 상황에서 많은 응용 프로그램을 한 번에 실행하면 (일반적으로 컴퓨터가 느리게 시작되어 하드 디스크 드라이브의 성능이 저하되기 때문에이를 알 수 있습니다), 64 비트 OS (그리고 충분한 RAM).

  • 64 비트 Windows에서 문제없이 32 비트 응용 프로그램 (드라이버 제외)을 실행할 수 있습니다. 필자가 64 비트 Windows에서 32 비트 응용 프로그램에 대해 측정 한 최악의 속도 저하는 약 5 %입니다. 즉, 32 비트 Windows에서 60 초가 걸리면 최대 60 * 1.05 = 65 초가 걸립니다. 64 비트 Windows에서 동일한 32 비트 응용 프로그램).

32 비트 대 64 비트의 차이점 아니 암시 :

x86 시스템에서 32 비트 대 64 비트 직접 포인터의 크기를 나타냅니다. 그게 다야.

  • 그것은 C의 크기를 언급하지 않는다. int 유형. 이것은 특정 컴파일러 구현에 의해 결정되며, 널리 사용되는 대부분의 컴파일러는 32 비트 int 64 비트 시스템에서.

  • 그것은하지 않습니다. 직접 일반적인 비 포인터 레지스터의 크기를 참조하십시오. 그러나 64 비트 산술 레지스터를 사용하면 응용 프로그램과 OS가 64 비트 포인터 모드로 실행되어야합니다.

  • 그것은하지 않습니다. 직접 물리적 주소 버스의 크기를 참조하십시오. 예를 들어, 64 비트 폭의 캐시 라인 및 최대 512GiB 메모리를 갖는 시스템은 그 어드레스 버스 (즉, log2(512*1024**3) - log2(64) = 33 ).

  • 실제 데이터 버스의 크기는 제조 비용 (CPU 소켓의 핀 수) 및 캐시 라인 크기와 관련이 있습니다.


8
아주 좋은 대답. 특히 실제로 4GB RAM 제한은 없지만 프로세스 메모리 사용 제한이 있음을 지적했기 때문에 특히 그렇습니다. 귀하의 정보를 위해서, 나는 당신이이 링크를 살펴 봐야한다고 생각합니다 : unawave.de/windows-7-tipps/32-bit-ram-barrier.html?lang=EN
Breakthrough

8
16 비트 응용 프로그램 / 32 비트 또는 서명되지 않은 커널 모드 드라이버를 사용하는 응용 프로그램은 64 비트 창에서 작동하지 않습니다. 저 같은 소프트웨어 중독자를위한 많은 것들 ...
fluxtendu

1
@flextendu는 이러한 오래된 프로그램의 성능 요구 사항을 감안할 때 가상 시스템에서 실행할 수 있습니다. VMware Player, Virtual PC 및 Virtual Box를 사용하면 32 비트 Windows 라이센스를 보유한 경우 그 중 하나를 시도하지 않아도됩니다. 당신이 그걸 망치고 싶지 않다면 아마 "Windows XP Mode"에서도 작동 할 것입니다.
Mark Booth

6
32 비트 응용 프로그램은 매니페스트에서 특정 플래그가 활성화되어 있지 않으면 RAM 2GB 이상을 사용하지 않습니다. 출처: blogs.technet.com/b/markrussinovich/archive/2008/11/17/...
Hello71

예, Hello71은 여기에서 다루지 않는 매우 중요한 것을 쳤습니다 : 대부분의 32 비트 앱은 여분의 RAM을 직접 활용하지 않습니다. 나는 이것이 언급할만한 가치가 있다고 생각한다.
Django Reinhardt

107

기본적으로 모든 것을 더 큰 규모로 할 수 있습니다.

  1. 운영 체제 당 RAM : OS (대부분의 경우)에 대한 x86의 RAM 제한은 4GB입니다.
  2. 프로세스 당 RAM : 프로세스에 대한 x86의 RAM 제한은 4GB입니다 (항상). 중요하지 않다고 생각되면 거대한 MSSQL 데이터베이스 집약적 응용 프로그램을 실행 해보십시오. & gt; 4GB 자체를 사용할 수 있고 훨씬 뛰어납니다.
  3. 구애: 주소는 32 비트 대신 64 비트이며 더 많은 메모리를 사용하는 "더 큰"프로그램을 가질 수 있습니다.
  4. 프로그램에서 사용할 수있는 핸들 : 더 많은 파일 핸들, 프로세스 등을 생성 할 수 있습니다. Windows x64에서 예제를 만들려면 & gt; 프로세스 당 2000 개의 스레드가 있지만 x86에서는 수 백에 가깝습니다.
  5. 사용 가능한 더 넓은 프로그램 : x64에서 x86 및 x64 프로그램을 모두 실행할 수 있습니다. (예제 창 : wow64, windows 32, windows 64 에뮬레이션)
  6. 에뮬레이션 옵션 : x64에서 x86 및 x64 VM을 모두 실행할 수 있습니다.
  7. 더 빨리 : 일부 계산은 64 비트 CPU에서 더 빠릅니다.
  8. 여러 시스템 리소스 나누기 : 많은 RAM 메모리는 시스템 리소스를 나눌 수있는 하나 이상의 VM을 실행하려는 경우 매우 중요합니다.
  9. 가능한 독점 프로그램 : 몇 가지 새로운 프로그램은 x64 만 지원합니다. Exchange 2007의 예.
  10. 미래의 x86 :? 시간이 지남에 따라 점점 더 많은 64 비트가 사용되고 더 많은 x86이 사용되지 않을 것입니다. 따라서 공급 업체는 64 비트 만 지원합니다.

64 비트 아키텍처의 두 가지 큰 유형은 x64 및 IA64 아키텍처입니다. 그러나 x64는 지금까지 가장 인기가 있습니다.

x64는 x64 명령뿐만 아니라 x86 명령도 실행할 수 있습니다. IA64는 x86 명령도 실행하지만 SSE 확장은 수행하지 않습니다. x86 명령어 실행을 위해 Itanium 전용 하드웨어가 있습니다. 그것은 에뮬레이터이지만 하드웨어에 있습니다.

@ Phil이 언급했듯이, 당신은 더 깊은 모습을 볼 수 있습니다. 그것이 어떻게 작동하는지 여기에서 .


1
음. IA64는 x86 명령을 실행합니다. SSE 확장은하지 않습니다. x86 명령어 실행을 위해 Itanium 전용 하드웨어가 있습니다. 그것은 에뮬레이터이지만 하드웨어에 있습니다.
tzot

2
몇 년 전, 레이몬드 첸 (Raymond Chen)은 2000 년 실 "한계"에 대해 게시했는데, 그것은 다소 도시 전설입니다. blogs.msdn.com/oldnewthing/archive/2005/07/29/444912.aspx
bk1e

Arstechnica의 설명을위한 Upvote.
Avihu Turzion

2
4GB의 RAM 제한은 사실이 아닙니다 (가정용 Windows 시스템에 적용되는 인위적인 제한 임). PAE . 대부분의 최신 하드웨어에서 Linux PAE 커널 (기본적으로 32 비트 용으로 사용되는 커널)은 4GB 이상을 처리 할 수 ​​있습니다. FreeBSD와 NetBSD도 마찬가지입니다.
Izzy

32 비트 시스템은 "주소"(3 번째 문장) 때문에 4GB (첫 번째 문장) 이상을 사용할 수 없습니다. 32 비트 숫자가 4.294.967.296 (= 4GB)이기 때문에. 따라서 첫 번째와 세 번째 문장은 똑같습니다. 세 번째 괄호를 제거 할 수 있습니다. :)
Jet

46

현재 사람들이 주목할 가장 큰 영향은 32 비트 PC가 최대 4GB의 메모리 만 처리 할 수 ​​있다는 것입니다. 운영 체제에서 다른 용도로 할당 된 메모리를 꺼내면 PC는 3.25GB의 사용 가능한 메모리 만 표시합니다. 64 비트로 이동하면이 한도가 사라집니다.

심각한 발전을하는 경우 이것이 매우 중요 할 수 있습니다. 여러 개의 가상 컴퓨터를 실행 해보면 곧 메모리가 부족합니다. 서버는 추가 메모리가 필요할 가능성이 높으므로 서버보다 64 비트 사용량이 데스크톱보다 훨씬 큽니다. 무어의 법칙은 우리가 기계에서 더 많은 메모리를 확보 할 수있게 해 주므로, 어느 시점에서 데스크톱도 표준으로 64 비트로 전환 할 것입니다.

프로세서 차이점에 대한 자세한 설명은이 훌륭한 기사를 확인하십시오. ArsTechnica .


7
32 비트 플랫폼과 4GB 제한은 다소 잘못된 이름이며 주로 운영 체제 아키텍처 선택 / 디자인 제한입니다. 실제로 32 비트에서 4GB는 프로세스 VA 공간에서 한계에 도달했습니다. 물리적 주소는 Intel 32 비트 CPU에서 36 비트를 지원합니다.
Tall Jeff

1
당신은 확실히 진실한 좋은 지적을합니다. 그러나 PC 사용자의 현실 세계에 미치는 영향은 기기가 지불 한 전체 4GB를 사용하지 않는다는 것입니다. 우리 아빠는이 문제가 있었는데 그가 지불 한 4GB를 완전히 사용할 수 없다는 사실을 여전히 혼란 스럽습니다.

2
당신의 요점을 고맙게 생각하지만, 수정 사항이 프로세서에 없거나 64 비트가 될 것이라는 개념을 유도하려한다면, 이는 약간 개선 된 OS 디자인의 문제 일뿐입니다. 이것은 예를 들어 32 비트 버전으로 돌아간 엔터프라이즈 버전의 Windows에서도 마찬가지입니다. 그것은 64GB의 RAM을 허용합니다.
Tall Jeff

기술적으로 한계는 사라지지 않습니다. 그것은 앞으로 10 년 정도면 언제든지 컴퓨터에 많은 RAM을 설치하는 것이 불가능하거나 불가능한 곳으로 나아갑니다.

에 대한 내 발언보기 PAE 4GB 제한은 전체 시스템에 해당하지 않지만 단일 프로세스에만 적용됩니다 (프로세스가 4GB 이상을 액세스 할 수는 없지만 전체 시스템, 즉 모든 프로세스를 PAE가 활성화 된 상태로 유지할 수 있음). 따라서 4GB 이상을 액세스 할 수 있다는 이점이있는 응용 프로그램이없는 경우 (큰 비디오 파일이있는 비디오 편집기 / 변환기 등) 8GB +가 설치되어 있어도 32 비트 또는 64 비트를 사용하든 별 차이가 없습니다.
Izzy

31

아무 것도 무료입니다 : 64 비트 응용 프로그램 양철통 32 비트 응용 프로그램보다 많은 메모리를 액세스 할 수 있다는 단점이 있습니다. 필요한 것 더 많은 메모리. 예를 들어, Emacs의 기본 요구 사항은 64 비트 아키텍처 용으로 빌드 될 때 60 % 더 많은 메모리입니다. 이 여분의 풋 프린트는 메모리 계층 구조의 모든 수준에서 성능을 저하시킵니다. 디스크에서로드하는 데 시간이 오래 걸리면 작업 집합이 많아지면 페이징이 많아지며 개체가 클수록 프로세서 캐시가 적어집니다. 16K L1 캐시가있는 CPU에 대해 생각해 보면 32 비트 응용 프로그램은 누락되기 전에 4096 포인터로 작동하고 L2 캐시로 이동하지만 2048 포인터 후에는 64 비트 응용 프로그램이 L2 캐시에 도달해야합니다.

x64에서는 더 많은 레지스터와 같은 다른 아키텍처 향상으로 완화되지만, 응용 프로그램이 & gt; 4G를 사용할 수없는 경우 PowerPC에서 "ppc"보다 "ppc"에서 더 빨리 실행될 가능성이 있습니다. 인텔에서도 x86에서 더 빠르게 실행되는 워크로드가 있고 x86보다 x86보다 5 % 이상 빠름.


2
이 대답은 PowerPC64가 x86-64만큼 좋지 않다는 것을 암시합니다. 진실은 powerpc64가 powerpc를 향상시키지 않았다는 것입니다. powerpc가 손상되지 않았기 때문입니다.
ctrl-alt-delor

3
Linux는 이제 x32 ABI를 사용하여 x86-64의 속도 향상 (레지스터 수를 늘리고 ABI 재 설계)을 얻었지만 32 비트 포인터를 사용합니다. +1은 64 비트 모드의 이점이 실제 너비 증가가 아니라 건축물을 뒤로 밀고 다니는 많은 수하물을 떨어 뜨릴 수있는 기회라는 것을 나타냅니다. 64 비트 레지스터는 일부 애플리케이션에 가치가 있지만 64 비트 포인터 공간은 자주 필요하지 않습니다.
Peter Cordes

19

64 비트 OS는 더 많은 RAM을 사용할 수 있습니다. 실제로 그것에 관한 것입니다. 64 비트 Vista / 7은 중요한 구성 요소를 RAM에 배치하는 곳의 안전 기능을 사용하지만 실제로 그렇게 눈에 띄지는 않습니다.

ChrisInEdmonton 보낸 사람 :

ix86의 32 비트 운영 체제   PAE가있는 시스템은 최대 64 개의 주소를 지정할 수 있습니다.   GB의 RAM. 64 비트 운영 체제   x86-64에서 최대 256 TB의 액세스 가능   가상 주소 공간.   후속 프로세서에서 재배치   ~ 16 EB. 일부 작동 중   시스템은 주소 공간을 제한합니다.   더 나아가, 대부분의 마더 보드는   추가 제한 사항이 있습니다.


4
OS의 경우, 32 비트 대 64 비트는 포인터의 크기를 나타냅니다 (첫 단락에서 올바르게 설명하는 부분). -1 : 일부 OS는 기본 정수 크기를 포인터 크기로 고정 시키지만 Windows 나 Linux는 그렇게하지 않습니다. 정수 연산 정밀도는 변경되지 않습니다. 널리 사용되는 OS는 부동 소수점 정밀도를 변경하지 않습니다 (두 번째 단락에서 주장하는 것). "float"또는 "single"은 32 비트이고, "double"은 OS가 32 비트 또는 64 비트 포인터를 사용하는지 여부에 관계없이 64 비트입니다.
Mr Fooz

아, 나는 분명히 오해했습니다.
Phoshi

문제 없어. -1 & gt; +1
Mr Fooz

대답을 편집하여 얼마만큼의 RAM에 액세스 할 수 있는지 알려줄 가치가 있습니다. PAE가있는 ix86 시스템의 32 비트 운영 체제는 최대 64GB RAM을 주소 지정합니다. x86-64의 64 비트 운영 체제는 최대 256TB의 가상 주소 공간에 액세스 할 수 있지만 후속 프로세서에서 최대 16BB까지 증가 할 수 있습니다. 일부 운영 체제는 주소 공간을 더 제한하며 대부분의 마더 보드에는 추가 제한 사항이 있습니다.
ChrisInEdmonton

나는 숫자를 간단하게 유지하고 싶었다. 대개 현재로서는 부적절 할만큼 충분히 높지만, 지금은 그들을 붙들어서는 안됩니다.
Phoshi

14

전체 에세이를 작성하지 않고도 모든 질문에 답변 할 수 있는지 확신 할 수는 없지만 (항상 Google이 있습니다 ...), 64 비트 용으로 앱을 다르게 설계 할 필요는 없습니다. 나는 포인터 크기가 int와 더 이상 같은 크기가 아니라는 것을 염두에 두어야 만한다는 것을 알 수 있습니다. 그리고 더 이상 사실이 아닐 수도있는 4 바이트 길이의 특정 유형의 데이터에 대한 내장 된 가정에 대해 잠재적 인 문제가 발생할 수 있습니다.

이것은 파일에서 저장 / 로딩, 데이터 반복, 데이터 정렬, 데이터의 비트 연산에 이르기까지 애플리케이션의 모든 종류의 문제를 일으킬 수 있습니다. 포팅을 시도하고있는 기존 코드베이스를 가지고 있거나 두 가지 모두에 대해 작업하고 있다면, 약간의 문제를 해결할 수 있습니다.

나는 이것이 디자인 문제가 아니라 구현 문제라고 생각한다. 나. 내 생각에 "디자인"은 사진 편집 패키지가 단어가 무엇이든지간에 동일 할 것이라고 말합니다. 우리는 32 비트와 64 비트 버전 모두로 컴파일되는 코드를 작성합니다. 디자인은 확실히 두 코드 사이에 다르지 않습니다 - 동일한 코드베이스입니다.

64 비트의 근본적인 "큰 문제"는 32 비트보다 훨씬 큰 메모리 주소 공간에 액세스 할 수 있다는 것입니다. 즉, 실제로 컴퓨터에 4GB 이상의 메모리를 넣고 실제로 효과를 낼 수 있습니다.

나는 다른 대답이 세부 사항에 들어가고 나보다 더 많은 이익을 얻을 것이라고 확신한다.

차이를 발견하는 측면에서 프로그래밍 방식으로 포인터의 크기 (예 : sizeof (void *)) 만 확인하면됩니다. 4의 답은 32 비트를 의미하고 8은 64 비트 환경에서 실행 중임을 의미합니다.


4
우연히 특정 포인터 유형이 특정 정수 유형과 동일한 크기라고 가정하는 프로그램을 작성한다면, 그럴 것입니다. 이것은 오랫동안 사실이었습니다.
David Thornley

@ 데이비드 : 당신은 절대적으로 맞습니다. 불행히도 거기에는 엄청난 양의 코드가 있습니다.

10

32 비트 프로세스에는 4GB의 가상 주소 공간이 있습니다. 일부 앱의 경우 너무 적을 수 있습니다. 64 비트 앱은 사실상 무제한의 주소 공간을 가지고 있습니다 (물론 제한적이지만이 제한에 부딪 힐 가능성은 거의 없습니다).

OSX에는 다른 장점이 있습니다. 자세한 내용은 다음 기사 , 왜 64 비트 주소 공간에서 커널을 실행 시키는가 (앱이 64 또는 32를 실행하는지 여부에 관계없이) 또는 64 비트 주소 공간에서 실행되는 앱 (커널이 여전히 32 비트 인 동안)을 사용하면 성능이 훨씬 향상됩니다. 요약하면 : 64 비트 (커널 또는 응용 프로그램 또는 둘 다) 인 경우 TLB ( "번역 lookaside 버퍼")는 커널에서 공간을 사용하거나 다시 사용할 때마다 플러시 할 필요가 없습니다. 업 RAM 액세스).

또한 "long long int"변수 (uint64_t와 같은 64 비트 변수)로 작업 할 때 성능이 향상됩니다. 32 비트 CPU는 두 개의 64 비트 값을 더하거나 나누거나 빼거나 곱할 수 있지만 단일 하드웨어 연산에서는 더할 수 없습니다. 대신이 작업을 두 개 (또는 그 이상)의 32 비트 작업으로 분할해야합니다. 따라서 64 비트 숫자를 많이 사용하는 앱의 경우 하드웨어에서 64 비트 수학을 직접 수행 할 수있는 속도가 향상됩니다.

마지막으로 x86-64 아키텍처는 기존 x86 아키텍처보다 많은 레지스터를 제공합니다. 레지스터로 작업하는 것은 RAM으로 작업하는 것보다 훨씬 빠르며 CPU가 더 많은 레지스터 일수록 레지스터 값을 RAM으로 스왑하고 레지스터로 다시 가져 오는 것이 더 적습니다.

CPU가 64 비트 모드에서 실행될 수 있는지 알아 보려면 다양한 sysctl 변수를 살펴보십시오. 예 : 터미널을 열고 입력하십시오.

sysctl machdep.cpu.extfeatures

EM64T를 나열하면 CPU가 x86-64 표준에 따라 64 비트 주소 공간을 지원합니다. 당신은 또한 찾을 수 있습니다

sysctl hw.optional.x86_64

1 (true / enabled)이라고하면 CPU는 x86-64 비트 모드를 지원하고 0 (false / disabled)이라고 표시하면 그렇지 않습니다. 설정이 전혀 발견되지 않으면 허위로 간주하십시오.

참고 : 네이티브 C 응용 프로그램 내에서 sysctl 변수를 가져올 수도 있습니다. 명령 줄 도구를 사용할 필요가 없습니다. 만나다

man 3 sysctl

오류 : "machdep.cpu.extfeatures"는 알 수없는 키입니다.

나는 당신이 인텔을 가질만큼 불행하지 않은 경우 EM64T라고도 부르지 않는다고 생각합니다.

9

addressspace는 (실제) 이상의 메모리에 사용될 수 있습니다. 또한보다 큰 액세스 패턴에서 성능을 향상시킬 수있는 대용량 파일을 메모리 매핑 할 수 있습니다.보다 강력하고 효율적인 블록 수준의 VM 수준 캐싱이 시작되므로 heapmanager가 적기 때문에 64 비트에서 대용량 메모리 블록을 할당하는 것이 더 안전합니다 큰 블록을 할당 할 수없는 주소 공간 조각화가 발생할 가능성이 있습니다.

이 스레드에서 (# 레지스터를 두 배로 늘린 것과 같은) 몇 가지 것들은 x86- & gt; x86_64, 일반적으로 64 비트가 아닙니다. 사실 x86_64에서 보장되는 것은 SSE2, 686 개의 opcode와 PIC를 수행하는 저렴한 방법입니다. 이러한 기능은 엄격하게 64 비트가 아니며 기존 x86 기반 제한 사항을 해결하고 수정하는 것에 관한 것입니다.

더욱이 사람들은 레지스터 증가를 속도 향상의 원인으로 지적하지만, SSE2의 기본 사용법 (memcpy 및 유사 기능 가속화)은 그럴 것입니다. x86에 대해 동일한 세트를 사용하면 차이가 작아집니다. (*) (***)

포인터의 크기가 더 크기 때문에 평균 데이터 구조가 간단히 증가하기 때문에 초기 페널티가 포함되는 경우가 종종 있습니다. 이것은 캐시 효과도 있지만 평균 memcpy () (또는 메모리 복사에 해당하는 것이 무엇이든지간에)가 오래 걸린다는 점에서 더 현저합니다. 이것은 단지 몇 퍼센트 btw의 크기이지만 위의 속도 향상도 그 정도입니다.

일반적으로 정렬 오버 헤드는 64 비트 아키텍처에서도 커집니다 (이전의 32 비트 레코드는 종종 32 비트와 64 비트 값의 혼합이됩니다).

전반적으로 간단한 테스트에 따르면, 드라이버와 런타임 라이브러리가 완전히 개조되어 평균적인 앱에 상당한 속도 차이가없는 경우 서로를 대략 취소 할 것입니다. 그러나 일부 앱은 갑자기 빨라질 수 있습니다 (예 : AES에 따라 다를 때). 또는 느린 경우 (중요한 데이터 구조가 끊임없이 이동 / 스캔 / 보행되고 포인터가 많이 포함됨). 테스트는 Windows에서 수행되었으므로 PIC 최적화는 벤치 마크되지 않았습니다.

대부분의 JIT-VM 언어 (Java, .NET)는 평균보다 (예 : 내부) 평균적으로 훨씬 더 많은 포인터를 사용합니다. C ++. 아마도 평균 메모리 사용량보다 메모리 사용량이 더 많을 것입니다. 그러나 이러한 현상은 속도가 느린 효과와 직접적으로 동일시하지 않습니다. (이는 실제로 복잡하고 펑키 한 짐승이며 측정하지 않고 예측하기가 어렵 기 때문에)

(*) 조금 알려진 사실은 64 비트 모드에서 SSE 레지스터의 수가 두 배가된다는 것입니다

(**) Dobbs 박사는 몇 년 전에 그것에 대한 좋은 기사를 가지고있었습니다.


8

대부분의 사람들이 여기서 언급하고있는 명백한 기억 영역 문제 외에, Knuth가 최근에 말하고있는 "broadword computing"의 개념을 살펴볼 가치가 있다고 생각합니다. 비트 조작을 통해 얻을 수있는 많은 효율성이 있으며 64 비트 단어의 비트 연산은 32 비트 단어보다 훨씬 더 많이 사용됩니다. 즉, 메모리를 사용하지 않고도 레지스터에서 더 많은 연산을 수행 할 수 있으며, 성능면에서 볼 때 상당한 이점이 있습니다.

제가 말하고있는 멋진 트릭의 몇 가지 예를 보려면, Pre-Fascicle 1A의 Volume 4를보십시오.


7

더 많은 메모리를 처리 할 수있는 기능 이외에도 x86_64에는 컴파일러가보다 효율적인 코드를 생성 할 수 있도록 더 많은 레지스터가 있습니다. 성능 향상은 대개 비교적 작습니다.

x86_64 아키텍처는 x86과 역 호환됩니다. 수정되지 않은 32 비트 운영 체제를 실행할 수 있습니다. 또한 64 비트 OS에서 수정되지 않은 32 비트 소프트웨어를 실행할 수도 있습니다. 그것은 모든 일반적인 32 비트 라이브러리를 필요로합니다. 별도로 설치해야 할 수도 있습니다.


더 많은 레지스터와 재 설계된 ABI (레지스터에 전달 된 함수 인수)는 보통 10 ~ 15 %의 속도 향상 속도를 보이며 꽤 괜찮습니다. 이제는 32 비트 포인터가있는 x32 Linux ABI가 있지만 amd64 긴 모드와 args-in-registers 호출 규칙을 사용합니다. 따라서 모든 포인터에 대해 64 비트가 필요하다는 오버 헤드없이 amd64의 모든 속도 이점을 누릴 수 있습니다. & gt; & gt; 필요하지 않은 모든 것에 좋습니다. 4GB의 (가상) 메모리.
Peter Cordes

6

이 스레드는 이미 너무 길지만 ...

대부분의 응답은 사용자가 64 비트 주소 공간이 더 크다는 사실에 초점을 맞추기 때문에 더 많은 메모리를 처리 할 수 ​​있습니다. 모든 응용 프로그램의 약 99 %에 대해 이것은 완전히 부적절합니다. 큰 우프.

그만큼 레알 이유는 64 비트 좋은입니다 아니 레지스터가 더 크지 만 그 수는 두 배입니다! 이는 컴파일러가 값을 메모리에 쏟아 넣지 않고 몇 가지 지침으로 나중에 다시로드하는 대신 레지스터에 더 많이 저장할 수 있음을 의미합니다. 최적화 컴파일러가 루프를 풀어 주면 루프를 두 배 정도 풀어서 성능을 실제로 향상시킬 수 있습니다.

또한 64 비트에 대한 서브 루틴 호출자 / 호출 수신자 규칙은 전달 된 매개 변수의 대부분을 호출자가 스택에 밀어 넣고 호출 수신자가 호출하는 대신 레지스터에 유지하도록 정의되었습니다.

따라서 "일반적인"C / C ++ 응용 프로그램은 64 비트 용으로 다시 컴파일하면 성능이 약 10 % 또는 15 % 향상됩니다. (앱의 일부가 계산 된 것으로 가정 할 때 물론, 이는 사실을 보장하지 않으며 모든 컴퓨터는 같은 속도로 기다립니다. 마일리지가 다를 수 있습니다.)


명령어 세트는 x86보다 x86 용으로 더 좋지만 일반적으로 중요하지 않습니다. 명령어가 커질 수 있기 때문에 64 비트 코드는 32 비트보다 느릴 수 있으므로 캐시에 들어갈 수있는 명령어가 적습니다. (Unrolling loops, BTW는 현재 캐시 미스 (cache miss)의 수를 증가시킬 것이기 때문에 매우 의심스러운 기술이다.) 내가 일하는 곳에서는 메모리 어드레싱을 늘리기 위해 64 비트가 필요하다.
David Thornley

David, x64 및 x86 명령어 세트는 피연산자 크기 및 일부 레지스터 접두사를 제외하고 거의 동일합니다. IA64, 일명 Itanium Itanium, 64 비트 코드는 일반적으로 x86 코드의 3 배가되며 명령 캐시는 사용자가 말한 것과 똑같이 강조합니다. 이는 아키텍처가 왜 비참하게 실패했는지에 대한 중요한 요소였습니다. 하지만 x86 일명 AMD64 EM64T 일 경우 코드 증가는 일반적으로 10-20 %에 불과합니다.

x64가 더 많은 레지스터를 만들지 만 주소 지정이 가능한 , 나는 실제 레지스터의 수를 실제로 얼마나 늘리는 지 잘 모르겠다. 유효한 - 최근의 모든 x86 프로세서는 섀도우 레지스터가 많고 (& gt; 100) "레지스터 이름 바꾸기"+ 추측 실행을 사용하여 독립 코드 경로가 어느 정도 병렬로 실행될 수있게합니다. 사실상 n 개의 독립적 인 코드 경로가 실행되는 경우 n 개의 레지스터가 사용 가능합니다 (모든 섀도우 레지스터가 다 소모 될 때까지).

@j_random_hacker. 그 트릭이 아키텍처 아래에서 진행되고 있다는 것은 옳은 일입니다. 그러나 얼마나 많은 섀도 레지스터를 사용할 수 있더라도 프로그램이 8 개 이상의 데이터 항목을 처리해야하고 명령 세트에 8 개의 레지스터 만 있으면 컴파일러 절대로 필요한 것 저장소 / 다시로드 지침을 생성합니다. 그래서 예, X64는 실제로 두 배 많은 레지스터를 "사용 가능"하게 만듭니다.

내 경험에 비추어 볼 때이 방법은 적다. 이동해야 할 avg memblock이 더 크다는 사실에 의해 상쇄된다.
Marco van de Voort

5

32 비트 컴퓨터에서는 4,294,967,295 바이트의 메모리 만 처리 할 수 ​​있습니다. 64 비트 컴퓨터에서는 1.84467441 × 10 ^ 19 바이트의 메모리가 있습니다.

위키 피 디아는 이것을 말한다.

64 비트 프로세서는 32 비트 환경에서 작업하는 것보다 두 배 빠른 특정 작업 (예 : 큰 숫자의 계승)을 계산합니다 (주어진 예제는 32 비트와 64 비트 Windows 계산기 간의 비교에서 파생 됨, 100 000 ). 이는 64 비트 최적화 응용 프로그램의 이론적 가능성에 대한 일반적인 느낌을줍니다.

64 비트 아키텍처는 디지털 비디오, 과학 컴퓨팅 및 대용량 데이터베이스와 같은 응용 프로그램에서 대용량 데이터 세트로 쉽게 작업 할 수 있지만 32 비트 호환 모드가 비교 가격보다 더 빠를 것인지에 대해서는 상당한 논란이있었습니다 다른 작업을위한 32 비트 시스템. x86-64 아키텍처 (AMD64)에서 대부분의 32 비트 운영 체제 및 응용 프로그램은 64 비트 하드웨어에서 원활하게 실행할 수 있습니다.

Sun은 64 비트 플랫폼 용 "서버"JIT 컴파일러 (C2) 만 구현했기 때문에 Sun의 64 비트 Java 가상 시스템은 32 비트 가상 시스템보다 시작 속도가 느립니다. 덜 효율적인 코드를 생성하지만 훨씬 빠르게 컴파일되는 "클라이언트"JIT 컴파일러 (C1)는 64 비트 플랫폼에서 사용할 수 없습니다.

속도가 32 비트 및 64 비트 프로세서를 비교할 때 고려해야 할 유일한 요소는 아닙니다. 멀티 태스킹, 스트레스 테스트, 클러스터링 (고성능 컴퓨팅 용)과 같은 애플리케이션 인 HPC는 올바른 배치를 고려할 때 64 비트 아키텍처에 더 적합 할 수 있습니다. 이러한 이유로 64 비트 클러스터는 IBM, HP 및 Microsoft와 같은 대규모 조직에 널리 배포되었습니다.


2
물리적 주소 버스 길이는 32 비트 또는 64 비트 프로세서와 관계없이 독립적입니다. 일부 32 비트 프로세서에는 32 비트보다 큰 주소 버스가 있으며 64 비트 프로세서에는 64 비트 주소 버스가 없습니다.

1
동의했다. 이론적으로 주소 공간은 2 ^ 64입니다. 실제로 CPU 제조업체는 2 ^ 40 또는 2 ^ 48과 같은 작은 값을 사용하고 있습니다.
Stu Thompson

5

위에서 언급 한 장점 외에도 보안과 관련하여 다음과 같은 이점이 있습니다.

  • x86_64 cpus는 페이지 테이블에 no-execute 비트를 가지고 있습니다. 나. 이렇게하면 버퍼 오버런으로 인한 취약성 공격을 막을 수 있습니다. 32 비트 x86 CPU는 PAE 모드에서만이 기능을 지원합니다.
  • 더 큰 주소 공간은 버퍼 오버런을 악용하는 것을 더욱 어렵게 만드는 더 나은 주소 공간 레이아웃 무작위 화 (ASLR)를 허용합니다.
  • x86_64 cpus는 위치 독립적 코드, 즉 명령어 포인터 레지스터 (RIP)에 대한 데이터 액세스를 특징으로합니다.

마음에 떠오르게되는 또 다른 장점은 다음과 같이 할당 된 가상 연속 메모리의 양 vmalloc() Linux 커널의 경우 64 비트 모드에서 더 커질 수 있습니다.


5

Microsoft.com의 견적 :

다음 표에서 증가 된   컴퓨터의 최대 자원   64 비트 버전의   Windows 및 64 비트 Intel 프로세서   기존의 32 비트와 비교된다.   리소스 최대 값.

MS-Table


2
32 비트 버전의 Windows에서 더 많은 실제 메모리를 사용할 수 있다는 점은 흥미롭지 만 가치가 없습니다. 예를 들어, en.wikipedia.org/wiki/...
ChrisInEdmonton

@ChrisInEdmonton 시스템은 4GB 또는 메모리 이상을 지원하지만 각 프로세스의 주소는 여전히 2GB로 제한됩니다 (주소가 큰 경우 3GB). 따라서 시스템에 많은 메모리가 있더라도 메모리가 많은 프로그램은 여전히 ​​도움이되지 않으며 성능은 여전히 ​​64 비트 버전보다 뒤집니다. 또한 ASLR 및 메모리 맵핑 파일의 주소 범위가 훨씬 작습니다.
phuclv

4

크리스토프 (Kristof)와 포시 (Poshi)는 32 비트와 64 비트 OS 간의 주요 기술적 차이점을 언급했다. 사용자 경험은 대개 이론과 많이 다르다. 현재 64 비트 소비자 버전의 Windows (XP 및 Vista)는 드라이버 지원에 큰 결함이 있습니다. 필자는 32 비트 버전에서 잘 작동하는 64 비트 버전에서는 작동하지 않는 많은 프린터, 스캐너 및 기타 외부 장치를 가지고있었습니다. 이들은 64 비트 드라이버를 가진 장치이며 여전히 작동하지 않습니다. 이 시점에서 Microsoft는 Windows 7이 현재 액세스 권한을 가진 uber-geek뿐만 아니라 실제 최종 사용자로부터이 문제를 처리하는 방법을 듣기 전까지 Microsoft의 64 비트 소비자 기반에서 벗어나도록 권장합니다. 최소한 6 개월을주고 사람들이 경험하고있는 것을보십시오. 개인적으로 필자는 Windows 7의 32 비트 버전을 설치하게 될 것입니다. 64 비트 버전의 Vista는 값 비싼 종이 무게로 이전에 사용을 중단하고 XP 32 비트로 되돌아갔습니다.


더 적은 운전자가 있을지도 모른다. 그러나 이것이 그것이 소리가 나게하는 것에 따라 아주 아주 나쁘지 않다. 나는 2007 년부터 64 비트를 돌렸고 결코 어려움을 겪지 않았다. 그런 말로, 나는 모호하거나 오래된 장치가 연결되어 있지 않습니다.
RomanSt

1
비스타 64 비트를 사용한 가장 최근의 제품은 지난 달 2 개월 된 Dell 시스템에서 신형 HP 복합기 프린터였습니다. Dell과 HP는 모두 포기하고 내 고객은 XP Pro를 설치하고 Vista를 제거하기 위해 돈을 지불했습니다. 어느 유닛에 대해서도 모호하지 않습니다.
Kevin K

1
일반적으로 64 비트 OS가 설치된 컴퓨터를 구입하면 모든 것이 작동합니다. 구형 컴퓨터를 업데이트하려고 시도하기 전에 조심해야합니다. 또는 오래된 프린터를 가지고 있거나 스스로 업그레이드 할 수 있다면 좋을 것입니다.
David Thornley

브랜드를 홍보하려는 하드웨어 Windows에서 작동합니다. 또는 Windows와 함께 사용하도록 인증 됨 로고 절대로 필요한 것 64 비트 드라이버를 제공합니다. 어쩌면 다음 번에 찾아 봐. 그러나 실제로 대부분의 소비자가 여전히 32 비트에있을 가능성이 있으므로 공급 업체는 소비자 하드웨어를 염려하지 않습니다.
Joey

2

일부 게임 프로그램은 비트 보드 대표. 예를 들어, 체스, 체커 및 오델로 (oshello)는 8x8 보드를 가지고 있으며, 즉 64 개의 정사각형이므로 기계어에 64 비트 이상을두면 성능이 크게 향상됩니다.

64 비트 빌드가 32 비트 버전의 거의 두 배 빠른 체스 프로그램에 대해 읽은 것을 기억합니다.


2

32 비트 및 64 비트라는 용어는 컴퓨터 프로세서 (CPU라고도 함)가 정보를 처리하는 방식을 나타냅니다. 64 비트 버전의 Windows는 32 비트 시스템보다 더 많은 RAM (Random Access Memory)을보다 효과적으로 처리합니다.

내 의견으로는 속도가 다를 수 있습니다.


1

Microsoft Windows와 관련하여 또 다른 요점은 32 비트 운영 체제 용이며 64 비트 컴파일에 최적화되지 않은 Win32 API가 여러 해 동안 존재한다는 것입니다. 내 응용 프로그램 용 DLL을 작성할 때 일반적으로 64 비트 버전이 아닌 Win32에서 컴파일합니다. Vista 이전에는 64 비트 버전의 Windows를 성공적으로 수행하지 못했습니다. 새 컴퓨터에서 4GB RAM을 사용할 수 있다고 생각하지만 여전히 32 비트 Windows XP Pro를 사용하고 있습니다. 안정적인 O / S는 XP64 또는 Vista와 관련이 있습니다.

16 비트에서 32 비트로의 전환이 있었을 때 왜 어떤 사람들에게는 큰 변화가 될 수 있는지에 대해 자세히 알아보기를 원할 수도 있습니다. 회사가 데스크톱에서 실행할 수있는 업무용 응용 프로그램 (예 : 작은 회계 패키지는 64 비트 운영 체제에서 실행되지 않을 수 있으므로 레거시 시스템을 가상 또는 실제 주위에 두어야 할 필요가 있습니다.

주소의 크기를 변경하면 큰 파급 효과와 반향이있을 수 있습니다.


1

대부분의 실제적인 목적을 위해 당신은 아마 차이를 느끼지 않을 것입니다.

64 비트 운영 체제를 설치하려면 64 비트 CPU (지난 몇 년 동안 대부분의 CPU)가 있어야합니다.

64 비트 운영 체제에는 몇 가지 장점이 있습니다.

  • 4GB 이상의 RAM을 실행할 수 있습니다 (32 비트 OS에서 처리 할 수있는 최대 수는 2 ^ 32 = 4GB입니다)
  • 대규모 데이터 세트 (예 : Excel) 및 계산 집약적 인 특정 작업 (예 : Photoshop 및 대용량 파일) 작업에 유용합니다.
  • 64 비트 운영 체제에서만 64 비트 프로그램을 실행할 수 있지만 두 프로그램 모두에서 32 비트 프로그램을 실행할 수 있습니다 (많은 프로그램이 둘 다 제공되므로 염두에 두라면 64 비트 만 너무 많지는 않습니다) 프로그램).

대부분의 시나리오에서 64 비트 프로그램은 약간 더 많은 메모리를 사용하지만 개인용 컴퓨터의 경우 일반적으로 인식되지 않습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.