죄송합니다 (Windows에서) 교환,하지만 난 그것에 대한 명확한 답을 찾을 수 없습니다 대 ~ 1MB) -> 어떤 이유로 든 메모리 할당이 여전히 실패 할 수 있습니까?메모리 할당 내 오히려 일반적인 질문에 대한
답변
스마트 스답은 "예, 어떤 이유로 메모리 할당이 실패 할 수 있습니다"입니다. 그것은 당신이 찾고있는 것이 아닐 수도 있습니다.
일반적으로 시스템에 사용 가능한 메모리가 남아 있는지 여부는 할당이 성공하는지 여부와 관련이 없습니다. 오히려 문제는 프로세스 주소 공간에 여유 공간이 있는지 여부입니다. virtual address space.
할당자는 (malloc
, operator new
, ...)가 가 매핑 이미 현재 프로세스에서 무료로 주소 공간이 존재하는 경우, 즉, 보이는 커널이 주소를 사용할 수 있어야 것을 알고있다. 존재하는 경우, 주소 공간은 할당 자에 예약되어 리턴됩니다.
그렇지 않으면 커널에 새 주소 공간을 프로세스에 매핑하라는 메시지가 표시됩니다. 이 은 일 수 있지만 일반적으로 매핑은 실제 메모리를 사용하지 않는다. 따라서 누군가가이 주소에 액세스하려고하면 커널이 실제 메모리를 찾아서 MMU 테이블은 가상 -> 물리적 인 변환으로 찾는다.
시스템 메모리가 부족하고 실제 메모리가 남아 있지 않으면 프로세스가 일시 중단되고 커널은 다른 프로세스의 메모리를 디스크로 옮겨 실제 메모리를 확보하려고 시도합니다. 단일 어셈블러 명령을 실행하는 데 오랜 시간이 걸렸습니다.
매핑 된 빈 영역이 충분하지 않고 커널이 매핑을 설정하기를 거부하면 프로세스의 메모리 할당이 실패합니다. 예를 들어, 대부분의 운영 체제는 커널을 특정 주소 (일반적으로 0x80000000, 0xc0000000, 0xe0000000 또는 32 비트 아키텍처의 일부)에 매핑하기 때문에 모든 가상 주소를 사용할 수있는 것은 아니므로 프로세스 당 한도가 시스템 제한 (예 : Windows에서 32 비트 프로세스는 시스템이 64 비트 인 경우에도 2GB 만 할당 할 수 있음) 파일 매핑 (예 : 프로그램 자체 및 DLL)은 사용 가능한 공간을 추가로 줄입니다.
매우 일반적이며 이론적 인 대답은 아니오 일 수 있습니다. 아주 특별한 상황에서 실패 할 가능성이있는 이유 중 하나는 사용 가능한/할당 가능한 메모리가 이상하게 조각 나있을 수 있다는 것입니다. 나는 당신이 (아마도 아주 사소한) 성능 향상 (pointer == NULL - 일종의 경우)을 시도하고 있는지 궁금해하고 있으며, 그것을 토론하고 싶다면, 아마도 채팅을 사용해야 할 것이다.
예, 32 비트 응용 프로그램에서 메모리 공간이 부족하면 메모리 할당이 실패하는 경우가 많습니다 (OS 버전 및 설정에 따라 2, 3 또는 4GB가 될 수 있음). 이것은 메모리 누출 때문일 것입니다. OS에서 스왑 파일의 공간이 부족한 경우에도 오류가 발생할 수 있습니다.
- 1. 질문에 대한 메모리 누수
- 2. 목적 C. 주조 INT는 일반적인 질문에 대한
- 3. JQuery와 :이 질문에 대한 유사 메모리
- 4. 예외에 대한 메모리 할당
- 5. auto_ptr에 대한 동적 메모리 할당
- 6. 배열에 대한 메모리 재 할당 C++
- 7. .NET의 컬렉션에 대한 메모리 할당
- 8. 맥 라이온 내 바보 같은 질문에 대한
- 9. 메모리 할당
- 10. 개체 배열에 대한 메모리 할당 - 내 이해가 유효합니까?
- 11. 메모리 할당
- 12. OpenGL에서의 메모리 할당
- 13. Coldfsuion의 요청에 대한 일반적인 메모리 사용량은 무엇입니까
- 14. 할당 메모리
- 15. 메모리 할당
- 16. 메모리 할당
- 17. 메모리 할당
- 18. 정적 배열의 동적 배열에 대한 메모리 할당
- 19. Segfault. 구조체 내에서 구조체에 대한 메모리 할당
- 20. 은 어떻게 프로그램이 현재 내 앞의 질문에
- 21. C++에서 컨테이너에 대한 메모리 할당
- 22. 어셈블리 런타임 메모리 할당
- 23. 할당 취소 및 메모리 할당 문제가
- 24. C# 메모리 할당 및 할당 해제 패턴
- 25. 클래스 생성자에서 포인터에 대한 메모리 할당
- 26. C++ STL 객체에 대한 메모리 할당
- 27. 관리되는 개체에 대한 관리되지 않는 메모리 할당
- 28. C에서 2D 배열에 대한 메모리 할당
- 29. C++ 메모리 할당 문제가
- 30. 메모리 할당 디자인 질문