아래 내용을 정리한 Kasa 발표문서: memory_management.ppt
<아티클>
How To Find Memory Leaks - flipcode
Presenting A Memory Manager - flipcode
memorymanagement.org
Memory Pool System Project
Play by Play: Effective Memory Management
GameDevelop - SourceCode
http://serious-code.net/moin.cgi/MemoryManagement
Gameboy Advance Resource Management-작은 메모리 환경에서 작업한다면, 유용할 듯
Visual Leak Detector - Enhanced Memory Leak Detection for Visual C++ (by Codeproject)
<메모리 풀링>
이광한님이 만드신 메모리 풀 소스
빗자루님의 메모리풀
빗자루님의 향상된 메모리풀
VMemPool
<기타>
메모리 할당 메쏘드 비교
<참고서적>
gpg2 - 1.10 드롭-인 디버그 메모리 관리자
gpg4 - 1.5 자유목록 템플릿을 이용한 메모리 단편화 해결
<구현목표>
1.
2.
3. memory 할당을 처리한다.
4. 위의 내용을 모두 포함해서 관리할 수 있는 메모리 관리 시스템을 설계한다.
<메모리 관리 시스템>
- Pooling은 Modern C++에 나와 있는 SmallObjAllocator를 이용해보자.. Gxx 엔진에서도 이것을 기반으로 이용하길래..
- Pool에서 관리하는 메모리와 Pool을 사용하지 않는 메모리를 모두 모니터링 할 수 있는 메모리 관리자를 만들어야 한다.
- 모든 메모리는 메모리 관리자를 이용해서 할당/해제 되어야 한다.
<noerror님의 의견>
-메모리 풀을 이용하거나 하는 것보다, 구현 할 때 조금 신경을 써서, 빈번한 메모리 할당/해제를 최대한 줄여서, 메모리 단편화를 줄이도록 노력하고.. 특히 문자열의 경우는 조금 더 신경을 쓰는 편이...
-메모리 사용량을 최대한 줄이도록 작업한다.
-string 객체와 같이 사용 빈도가 매우 높은 것들의 경우는 풀을 이용해도 좋을 듯..
<요약>
-memory 관리의 핵심은 어떻게 하면, 메모리 할당/해제 상태를 모니터링 할 수 있어야 한다. leak 메모리도 찾을 수 있어야 하고..
-메모리의 사용량을 최대한 절약할 수 있도록 하고, 메모리 할당/해제(Heap)이 너무 쓸데없이 빈번히 일어나지 않도록 유도한다. 즉, 메모리 단편화를 최대한 막을 수 있는 방향으로 정책을 정한다.
-메모리 풀을 이용하는 것이 Cache를 위한 것이라면, 어차피 OS 레벨에서 Cache 처리를 해준다고 들었다.. 하지만, 그것만이 아닌, 단편화를 막을 수 있는 방편이 될 수 있다면, 사용하는 의미가 있다고 생각한다.
<메모리 절약 방법>
1. 구조체를 정리하자.
struct A struct B
{ {
int a; int a;
byte b; int c;
int c; byte b;
byte d; byte d;
}; };
A, B는 모두 같은 내용을 자료형을 가지는 구조체 이지만, 구조체 사이즈는 sizeof(A)->16byte, sizeof(B)->12byte 이다.
기본적으로 윈도우 시스템에서 4byte 정렬을 시킨다는 것으로, 구조체만 잘 정리해도, 메모리를 아낄 수 있다.
2. 메모리의 구조는
| 코드: |
static stack . . . heap |
이런식으로 되어있는데...
local 메모리는 스택에 잡혀있어서 항시 캐쉬에 있기때문에
가장 빠른 속도가 나온다고 하더군요. 다만 스택크기의 제한이 있고..
static 메모리의 경우는 사용시 캐쉬에 올렸다가 해제하지만
위치가 가깝기 때문에 조금더 빠른속도가..
heap 메모리는 상당히 먼거리 -_-)/
음 왠지..
이유 설명이 쫌 부실하지만...
나중에 추가 내용을 붙이기로 하고...
어쨌든; 계산이 많이 사용되는곳에 있어서는
local>static>heap 순으로 쓰는게 좋다는 이야기입니다.
<출처: http://www.myevan.net/ >





덧글
cagetu 2007/01/08 18:33 # 답글
new/delete를 재정의해서 heap으로 할당된 memory를 관리. 원하는 시점에 모니터링을 할 수 있도록 한다.프로그램 종료시점에서 모니터링을 하면, leak된 것들을 볼 수 있겠지.. ㅎㅎ