64비트 애플리케이션의 메모리 사용량 오버헤드는 얼마입니까?
제가 지금까지 알아낸 바로는 64비트 아키텍처용으로 컴파일된 프로그램이 32비트 대체 프로그램인 https://superuser.com/questions/56540/32-bit-vs-64-bit-systems 보다 포인터에 두 배 더 많은 RAM을 사용한다는 것이 분명합니다.
64비트용으로 컴파일된 코드가 32비트 버전보다 평균 2배 더 많은 RAM을 사용한다는 뜻입니까?
어쩐지 의심스럽지만, 진짜 간접비가 무엇인지 궁금합니다.저는 생작타은은입들들예, 면를엔각내와 같은 유형들이 합니다.short
,byte
그리고.char
64비트 아키텍처에서 크기가 같습니까?는 잘 모르겠어요.byte
그도래. 프로그램들이 큰 브라우저하면, 이 이웹저등브과같우라은큰작때문로는동, 대은니다같구됩다성이과음부할많으로 구성되어 있습니다.char
대부분의 구현에서 어레이는 오버헤드가 그리 크지 않을 수 있습니다.
따라서 숫자 유형이 다음과 같다 하더라도int
그리고.long
64비트에서 더 큽니다. RAM 사용에 상당한 영향을 미칠까요, 아닌가요?
그것은 프로그래밍 스타일(및 언어에 따라 다르지만, 당신은 C를 언급하고 있습니다.
- 포인터 작업을 많이 하거나 일부 언어에서 참조가 많은 경우 RAM 사용량이 증가합니다.
- 다음과 같이 크기가 고정된 데이터를 많이 사용하는 경우
double
또는int32_t
RAM 사용량이 증가하지 않습니다. - 다음과 같은 유형의 경우
int
또는long
아키텍처에 따라 다릅니다. Linux와 Windows 사이에는 차이가 있을 수 있습니다.여기 여러분이 가지고 있는 대안들이 있습니다.간단히 말해서, Windows는 LLP64를 사용합니다. 즉,long long
는 LP64를 합니다. 여기서 LP64는 LP64, 64비트입니다.long
64비트도 마찬가지입니다.다른 아키텍처는 다음과 같은 이점을 제공합니다.int
아니 심지어는short
64비트도 마찬가지입니다. 하지만 이것들은 꽤 흔하지 않습니다. 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
'programing' 카테고리의 다른 글
CORS와 대응하여 페치 인 (0) | 2023.06.24 |
---|---|
URL에서 파일 다운로드/스트리밍 - asp.net (0) | 2023.06.24 |
벡터화는 무엇을 의미합니까? (0) | 2023.06.24 |
xxx 복사본이 모듈 트리에서 제거되었지만 여전히 활성 상태임 (0) | 2023.06.24 |
MongoDB는 동시 업데이트를 어떻게 처리합니까? (0) | 2023.06.24 |