programing

64비트 애플리케이션의 메모리 사용량 오버헤드는 얼마입니까?

javamemo 2023. 6. 24. 08:42
반응형

64비트 애플리케이션의 메모리 사용량 오버헤드는 얼마입니까?

제가 지금까지 알아낸 바로는 64비트 아키텍처용으로 컴파일된 프로그램이 32비트 대체 프로그램인 https://superuser.com/questions/56540/32-bit-vs-64-bit-systems 보다 포인터에 두 배 더 많은 RAM을 사용한다는 것이 분명합니다.

64비트용으로 컴파일된 코드가 32비트 버전보다 평균 2배 더 많은 RAM을 사용한다는 뜻입니까?

어쩐지 의심스럽지만, 진짜 간접비가 무엇인지 궁금합니다.저는 생작타은은입들들예, 면를엔각내와 같은 유형들이 합니다.short,byte그리고.char64비트 아키텍처에서 크기가 같습니까?는 잘 모르겠어요.byte그도래. 프로그램들이 큰 브라우저하면, 이웹저등브과같우라은큰작때문로는동, 대은니다같구됩다성이과음부할많으로 구성되어 있습니다.char대부분의 구현에서 어레이는 오버헤드가 그리 크지 않을 수 있습니다.

따라서 숫자 유형이 다음과 같다 하더라도int그리고.long64비트에서 더 큽니다. RAM 사용에 상당한 영향을 미칠까요, 아닌가요?

그것은 프로그래밍 스타일(및 언어에 따라 다르지만, 당신은 C를 언급하고 있습니다.

  • 포인터 작업을 많이 하거나 일부 언어에서 참조가 많은 경우 RAM 사용량이 증가합니다.
  • 다음과 같이 크기가 고정된 데이터를 많이 사용하는 경우double또는int32_tRAM 사용량이 증가하지 않습니다.
  • 다음과 같은 유형의 경우int또는long아키텍처에 따라 다릅니다. Linux와 Windows 사이에는 차이가 있을 수 있습니다.여기 여러분이 가지고 있는 대안들이 있습니다.간단히 말해서, Windows는 LLP64를 사용합니다. 즉,long long는 LP64를 합니다. 여기서 LP64는 LP64, 64비트입니다.long64비트도 마찬가지입니다.다른 아키텍처는 다음과 같은 이점을 제공합니다.int아니 심지어는short64비트도 마찬가지입니다. 하지만 이것들은 꽤 흔하지 않습니다.
  • float그리고.double모든 경우에 동일한 크기를 유지해야 합니다.

따라서 데이터 유형의 사용에 따라 크게 달라집니다.

메모리 사용량이 증가하는 데는 몇 가지 이유가 있습니다.그러나 64b와 32b의 오버헤드는 앱마다 다릅니다.

  • 주된 이유는 코드에서 포인터를 많이 사용하기 때문입니다.그러나 64비트용으로 컴파일되고 64비트 OS에서 실행되는 코드에서 동적으로 할당된 어레이는 32비트 시스템에서 할당된 어레이와 동일한 크기입니다.배열에 대한 주소만 더 크고 내용 크기는 동일합니다(유형 크기가 변경된 경우 제외). 그러나 이는 발생해서는 안 되며 문서화되어야 합니다.

  • 메모리 정렬로 인해 설치 공간이 또 증가할 수 있습니다.64비트 모드에서는 정렬이 64비트 주소를 고려해야 하므로 오버헤드가 조금 더 발생합니다.

  • 아마도 코드의 크기가 커질 입니다.일부 아키텍처에서는 64비트 ISA가 약간 더 클 수 있습니다.또한 이제 64비트 주소로 전화를 걸어야 합니다.

  • 64비트 레지스터에서 실행되는 경우 더 (64비트) 숫자 유형을 사용하면 컴파일러가 RAM 설치 공간이 증가하는 것을 의미하지 않도록 레지스터에 배치하는 것이 좋습니다.이중 변수를 사용하면 64b 레지스터에 저장되지 않으면 메모리 설치 공간이 증가할 수 있습니다.

  • Java, .NET과 같은 JIT 컴파일 언어를 사용할 경우 런타임 환경에서 포인터 사용, 숨겨진 제어 구조 등을 통해 추가 오버헤드가 발생하므로 64b 코드의 풋프린트 증가가 더 커질 가능성이 높습니다.

그러나 64비트 메모리 설치 공간 오버헤드를 설명하는 매직넘버는 없습니다.응용 프로그램 간에 측정해야 합니다.가 본 바로는 64비트에서 실행되는 애플리케이션의 설치 공간이 32비트에 비해 20% 이상 증가한 적이 없습니다.하지만 그것은 순전히 제가 접한 애플리케이션을 기반으로 한 것이고 저는 대부분 C와 C++을 사용하고 있습니다.

변수가 64비트 경계에 있는 메모리에 저장되어야 하는 또 다른 이유가 있을 수 있다고 생각합니다. 주소는...xxxxx000을 한 입에 읽으려면 한 번에 바이트 단위로 읽어야 합니다.

언급URL : https://stackoverflow.com/questions/29139829/what-is-the-memory-usage-overhead-for-a-64-bit-application

반응형