코딩할때 가장 기본이 되는 유용한 기능중 한가지가 바로 배열이라고 생각합니다.

 

 

배열은 동적 메모리 할당(dynamic memory allocation)정적 할당(static memory allocation)으로 선언할수있습니다.

 

 

또한 정적할당에서도 메모리가 할당이 되는곳이 선언방법에 따라 힙(heap) 영역과 스택(stack) 영역으로 나뉠수 있습니다.

 

 

간단히 이야기 해서 스택은 용량이 1메가바이트 (1MB = 1,000 KB = 1000,000 byte) 정도로 한정이 되어있다고 합니다.

 

 

그래서 지역번수를 선언할때 메모리 할당, 즉 배열 선언을 할때 정적배열의 크기가 너무 커버리면 스택 영역에 있어야 할 지역변수의 공간이 이웃한 다른 영역을 침범하게 되서 메모리 접근 오류가 발생할 수 있습니다.

 

 

결론은 간단히 이야기 해서 전역으로 정적 배열을 선언해버리면, 데이터 영역, 즉 힙 영역으로 메모리가 할당이 되어서 오류가 뜨지않고 사용을 할 수 있습니다.

 

 

오늘 작업하다가 지역함수 내에서 정적 메모리 할당을 했는데, 계속 오류가 뜨길래 찾아보고 찾아보다 그 해결책을 찾은거라 혹시나 해서 다른분들께도 도움이 되지않을까 해서 글 적어봅니다.

 

 

typedef double_double3_[3];

_double3_arrA[640*480];

_double3_arrB[640*480];

_double3_arrC[512*424];

 

 

위와 같이 정적 배열을 생성했는데, 계속 오류가 떠서, 전역으로 옮겨 줬더니 문제 없이 작동 되네요.

 

 

조금 더 자세한, 그리고 디테일한 설명을 원하시면 아래 참조 블로그를 들어가셔서 보시면 더욱 더 이해하시기 편하리라 생각합니다.

 

 

참조:

http://egloos.zum.com/slaveofcod/v/320270

http://inhack.org/wordpress/?p=2932

 

 

Posted by Tommy™
,