문제

크기가 4GB> 4GB를로드하려고 할 때 예외를 던지는 이미지 조작 라이브러리를 사용하고 있습니다. 64 비트라고 주장하지만 64 비트 라이브러리가 이미지를 그보다 더 큰로드 할 수는 없습니까? 64 비트 메모리 모델/컴파일러를 사용하여 C 라이브러리를 다시 컴파일했지만 여전히 서명되지 않은 정수를 사용했으며 64 비트 유형을 사용하기 위해 업그레이드가 실패했습니다.

그게 합리적인 결론입니까?

편집하다 - 사후에 OS 메모리가 너무나 사라질 수 있으므로 큰 덩어리의 할당이 더 이상 불가능할 수 있습니까? (재부팅 직후에도 작동하지 않지만 궁금합니다.) .NET는 어떻습니까? .NET 관리 메모리가 너무 파편화되어 큰 청크 할당이 실패 할 수 있습니까?

도움이 되었습니까?

해결책

합리적인 제안이지만 정확한 원인은 여러 가지 일 수 있습니다. 예를 들어 어떤 OS를 실행하고 있는지, 얼마나 많은 RAM / 스왑이 있습니까? Application/OS는 가상 메모리를 과도하게 커미션하지 않을 수 있으므로 이미지를 열려면 4GB (또는 그 이상)의 무료 RAM이 필요합니다.

관심이없는 것은 4GB 경계에서 명확한 정지 인 것 같습니다. 즉, 3.99GB 이미지가 성공하지만 4GB One FAIL을 수행합니다. 라이브러리 데이터 구조에서 32 비트 크기를 확실히 사용하는 것을 제안합니다.

업데이트

두 번째 질문과 관련하여 실제로는 아닙니다. 거의 모든 최신 OS의 가상 메모리를 사용하므로 각 프로세스는 자체 연속 주소 공간을 얻습니다. 프로세스 주소 공간의 단일 연속 영역은 인접한 물리적 RAM으로 뒷받침 될 필요가 없으며, RAM의 다수의 별도의 물리적 영역으로 구성 될 수 있습니다. 따라서 OS는 응용 프로그램에 4GB 덩어리를 제공하기 위해 단일 4GB의 RAM을 무료로 필요로하지 않습니다.

응용 프로그램이 가상 주소 공간을 파편화하여 인접한 4GB 영역을위한 공간이 없지만 64 비트 주소 공간의 크기를 고려할 때 시나리오에서는 거의 가능성이 거의 없습니다.

다른 팁

예, 이진 파일 형식 자체가 이미지의 크기를 제한하지 않는 한.

후속 조치에 응답하기 위해 최근에 읽었습니다 이것 기사와 흥미로운 것을 발견했습니다.

그렇습니다. .NET은 문제가있을 수 있습니다 메모리 조각화.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top