주 콘텐츠로 건너뛰기
CIVIL 생성 편집

[CIVIL] Memory Allocation Error는 어떻게 발생하나요?

질문 

RAM용량도 많고 HDD도 많이 남아 있는데 왜 Memory Allocation Error가 발생하는 것인가요?

 

답변 

추상적인 개념의 어떤 변수에 값을 저장하기 위해서는 실제 RAM 또는 HDD를 이용하는 가상메모리를 해당 변수에 할당을 해 주어야 합니다. 이와 같이 어떤 변수와 메모리를 서로 연결해 주는 것을 allocation이라고 합니다. 변수와 메모리를 서로 연결해 줄 수 없는 상황이 발생하게 되었을 때 Memory Allocation Error라고 표현하게 됩니다.

원인으로는 크게 (1)프로그램 개발과정에서의 코딩오류, (2)PC의 OS에서 관리하는 메모리운영상의 문제가 있습니다. 규모가 작은 모델인데도 불구하고 Memory Allocation Error가 발생한다거나 다른 PC에서도 동일하게 발생하는 경우에는 코딩오류일 가능성이 있습니다. 이런 경우에는 모델을 본사로 보내주시면 검토를 통해 정확한 원인을 확인할 수 있습니다. 그리고 PC 시스템에서 발생하는 메모리 운영과정에서 발생하는 문제도 가끔 보고가 되고 있습니다. 자유도 수가 꽤 많은 대규모 구조물에서 발생할 수 있는데, 특정 PC에서만 발생한다거나 재부팅하고 다른 프로그램들은 실행하지 않은 상태에서는 발생하지 않는다면 메모리 운영과정에서 발생하는 문제라고 판단할 수 있습니다.

 

 

 

EXAMPLE1과 EXAMPLE2는 동일한 메모리 공간에 대해서 C1이라는 배열 변수의 allocation 가능성에 대해 그림으로 설명한 것입니다. 배열변수는 연속된 메모리 공간이 있어야 allocation을 할 수 있습니다. 

두 예제 모두 배열변수 A1, B1이 처음 메모리에 할당이 된 상태에서 시작합니다. 2번째 단계에서 A2배열 변수가 할당된 것 까지는 두 예제 모두 동일합니다만, 3번째 단계에서 배열변수 A1이 deallocate되고 새로 할당되는 배열변수 B2의 위치가 OS에 의해 EXAMPLE1과 EXAMPLE2에서 서로 달라지게 되었다고 가정해 보겠습니다. 각 단계마다 기존 배열변수가 deallocate되고 새로운 배열변수가 allocate되는 과정이 진행되다가 마지막 단계에서 C1배열변수를 할당하려고 할 때, EXAMPLE1에서는 C1배열변수의 길이만큼의 공간이 부족하여 불가능한 상태가 되어 있지만, EXAMPLE2에서는 C1배열변수가 할당될 수 있는 상태입니다. 따라서 EXAMPLE1에서는 allocation error가 발생할 수 있습니다만, EXAMPLE2에서는 allocation error없이 정상적으로 진행이 될 수 있습니다. 

이런 경우에는 메모리 낭비를 줄이기 위해 다른 프로그램들은 종료하는 것이 좋습니다. HDD의 여유가 많다면 가상메모리의 크기도 늘려 주는 것도 대응 방법으로 제안할 수 있습니다. RAM의 용량을 크게 키우는 것도 방법이 될 수 있습니다. 최근 PC시스템에는 64bit 윈도우가 설치되고, RAM의 용량도 크게 증가하고 있어서 OS의 메모리 운영에 의한 문제는 많이 해소가 되고 있는 추세에 있습니다.

 

 

0
컨텐츠가 도움이 되셨나요?