유저 메모리 할당/해제 소스 |
| programming/general 2002/09/10 19:16 |
만들어 본 메모리 할당 / 해제 소스입니다. 예전에 GP32 어스토 프로그래밍 서포트할때 만들어서 사용했었는 데, 다시 만들어봤습니다.
자세한 설명은 정리를 잘 해서 나중에 강좌란에 올릴 생각이구요, 우선 간단히 정리해 보면...
1. 기본적으로 일정 크기의 메모리를 할당 받아서 그 메모리로 할당과 해제를 하도록 하는 코드
2. 기본적인 알고리즘은 빈 공간(노드) 중에 같거나 비슷한 공간을 찾아서, 할당될 부분과 빈 공간으로 분할한 후에 빈 공간(노드) 부분은 빈공간 리스트에 붙임.
3. 각 노드는 리니어하게 연결시켜둠. (모든 노드는 빈틈없이 연결되어 있기 때문에 다음노드는 별도의 포인터를 사용하지 않고, 현재 노드의 위치와 크기로 계산함. - 용량 절약)
4. 빈 공간(노드)는 빠르게 검색하기 위해서 2의 제곱 수 단위로 링크시켜두고, (용량문제와 효율 문제를 고려해서 그냥 싱글 링크드 리스트로 관리) 찾을 때 적절히 활용
5. 디버깅 모드에선 디버킹 팁 몇가지 사용. (Leak 체크, 메모리 침범 체크)
가볍게 정리하면 이 정도가 핵심 내용이 되겠네요.
사용자 메모리 할당 루틴의 장점이라면 메모리를 직접 관리하기 때문에 메모리의 사용 상황이나 분할된 상황등을 쉽게 파악할 수 있어서 좋습니다. (간단하게 디스크 조각모음처럼 화면에 할당된곳과 빈 곳의 이미지맵을 생성해서 표시할 수도 있습니다. - 해결에 크게 도움은 안되는 듯 싶습니다만... ^^)
메모리 할당이 많이 된 코드나 불필요하게 남아 있는 코드등을 실행 중간 중간에 체크해볼 수 있습니다. (이건 할당과는 무관하지만, 개발 과정에 반드시 해야 할 작업... 참고 페이지는 http://www.flipcode.com/tutorials/tut_memleak.shtml )
최근에 포켓 PC로 작업할 일이 있어서 작업했던 파일이고, 쭉 사용했기 때문에 어느정도 안정성은 검증된 코드라고 감히 말씀 드리겠습니다. ^^; (효율이 좋다고는 할 수는 없습니다만...)
구지 이런 식으로 루틴을 만들어 사용할 필요는 없지만, 만약 제한된 리소스 사용으로 불안해 하시거나, 즐기시는 (^^;) 분들은 한번 이런 식으로 접근해봐도 나쁘지는 않을 듯 싶습니다.
자세한 설명은 정리를 잘 해서 나중에 강좌란에 올릴 생각이구요, 우선 간단히 정리해 보면...
1. 기본적으로 일정 크기의 메모리를 할당 받아서 그 메모리로 할당과 해제를 하도록 하는 코드
2. 기본적인 알고리즘은 빈 공간(노드) 중에 같거나 비슷한 공간을 찾아서, 할당될 부분과 빈 공간으로 분할한 후에 빈 공간(노드) 부분은 빈공간 리스트에 붙임.
3. 각 노드는 리니어하게 연결시켜둠. (모든 노드는 빈틈없이 연결되어 있기 때문에 다음노드는 별도의 포인터를 사용하지 않고, 현재 노드의 위치와 크기로 계산함. - 용량 절약)
4. 빈 공간(노드)는 빠르게 검색하기 위해서 2의 제곱 수 단위로 링크시켜두고, (용량문제와 효율 문제를 고려해서 그냥 싱글 링크드 리스트로 관리) 찾을 때 적절히 활용
5. 디버깅 모드에선 디버킹 팁 몇가지 사용. (Leak 체크, 메모리 침범 체크)
가볍게 정리하면 이 정도가 핵심 내용이 되겠네요.
사용자 메모리 할당 루틴의 장점이라면 메모리를 직접 관리하기 때문에 메모리의 사용 상황이나 분할된 상황등을 쉽게 파악할 수 있어서 좋습니다. (간단하게 디스크 조각모음처럼 화면에 할당된곳과 빈 곳의 이미지맵을 생성해서 표시할 수도 있습니다. - 해결에 크게 도움은 안되는 듯 싶습니다만... ^^)
메모리 할당이 많이 된 코드나 불필요하게 남아 있는 코드등을 실행 중간 중간에 체크해볼 수 있습니다. (이건 할당과는 무관하지만, 개발 과정에 반드시 해야 할 작업... 참고 페이지는 http://www.flipcode.com/tutorials/tut_memleak.shtml )
최근에 포켓 PC로 작업할 일이 있어서 작업했던 파일이고, 쭉 사용했기 때문에 어느정도 안정성은 검증된 코드라고 감히 말씀 드리겠습니다. ^^; (효율이 좋다고는 할 수는 없습니다만...)
구지 이런 식으로 루틴을 만들어 사용할 필요는 없지만, 만약 제한된 리소스 사용으로 불안해 하시거나, 즐기시는 (^^;) 분들은 한번 이런 식으로 접근해봐도 나쁘지는 않을 듯 싶습니다.
mem.zip
댓글을 달아 주세요
친구는 너의 위치의 현재 팬이 되었다!
너는 아주 좋은 보는 위치가 있는다!
많은 감사 우수한 위치! 나는 너의 웹사이트를 사랑한다!
그런 경이롭 위치를 위해 많게의 감사!
많은 감사 우수한 위치! 나는 너의 웹사이트를 사랑한다!
나의 친구는 너의 위치의 현재 팬이 되었다!