int a = new int[5];
int b = new int[5];
int c = new int[5];
메모리 상황(■ : 할당된 메모리 □ : 빈 메모리)
a■■■■■ b■■■■■ c■■■■■
delete int [] b;
메모리 상황
a■■■■■ □□□□□ c■■■■■
int d = new int[10];
a■■■■■ □□□□□ c■■■■■ d■■■■■■■■■■
앞쪽에 빈 메모리가 있지만 10칸 분량의 메모리가 할당되기엔 부족하므로 맨 뒤쪽에 메모리가 할당된다.
이런 상황이 반복되면 군데군데 사용할 수 없는 작은 틈이 생깁니다.
나중엔 사용할 수 없는 메모리가 아주 많이 쌓이게 되고 결국 메모리가 남아 있는데도 사용 가능하지 못한 상태가 된다.
또한 어떤 게임에서 반지의 제왕처럼 많은 유닛이 살아나고 죽고 할경우 메모리 할당및 해제에 대한 오버헤드가 심하게 된다.
이런것의 방법으로 Memory pool 이라는 방법이 있다.
-------------------------------------------------------------------------------------------------------------------------------------------------------
풀(Pool)??
- '물 웅덩이'라는 뜻을 가지고 있습니다. 작은 연못을 생각하면 머릿속에서 그려질 겁니다.
흔히 메모리 풀을 많이 들어보게 됩니다.
메모리 풀의 원리
- 메모리를 동적으로 생성, 삭제해야 할 경우가 빈번하게 일어납니다.
- 동적 할당은 생성도 생성이지만 삭제할 때 오버 헤드(Overhead)가 상당하다고 합니다.
- 이 오버헤드를 줄이기 위해 메모리 풀을 사용합니다.
- 논리적인 이야기입니다. 메모리 풀에 미리 일정한 수의 메모리를 생성해둡니다.
- 필요할 때 메모리풀에서 생성해둔 메모리를 사용하며, 필요하지 않을 때 메모리를 삭제하는 것이 아니라, 메모리 풀에 반납합니다.
- 다시 메모리가 필요할 때 메모리 풀에서 메모리를 가져다 사용합니다.
- 이렇게 반복되면 메모리 생성, 삭제의 오버헤드가 없어지겠죠.
비유하자면 렌탈 서비스라고 할 수 있을까요?
MemoryPool< Object* > mMemoryPool;
mMemoryPool . AddMemory(new Object() , 200);
Object을 200개를 복사 메모리풀에 저장.
GetMemory(); 이건 스택방식으로 하나하나 가져오게 하면 될것같구요.
가지고 오면서 Lock 이란걸 해주면 좋겠네요 혹시나 사용하고 있는것을 가지고 올 수도 있으니깐요.
ReturnMemory(); 사용한 메모리에서 락을 해제 해주면 될것 같은데 Object를 넘긴다고 MemoryPool의 Container에 몇번째 인지 모르니 몇번째에서
가지고 왔는지 확인할 방법을 생각해야할것 같아요.
만드는 방식에는 여러가지가 있겠지만.............. 그리고 메모리풀에서 Object를 가져가 사용하긴 했는데 Object의 상태가 변형이 됐다면?
Object의 원본 상태를 저장한 뭔가가 필요할것 같아요. 디자인패턴의 Prototype을 사용하는것도 좋을것 같군요.
http://blog.naver.com/dovcat/70926068
출처: http://wearekorean.co.kr/zbxe/dic/34455
메모리 단편화(Memory Fragmentation)
int a = new int[5]; int b = new int[5]; int c = new int[5]; 메모리 상황(■ : 할당된 메모리 □ : 빈 메모리) a■■■■■ b■■■■■ c■■■■■ delete int [] b; 메모리 상황 a■■■■■ □□□□□... (2010-01-20)
버퍼 오버플로우(Buffer Overflow)
진정한 프로그래머한테 필요한 자판은 단지 3개뿐!!!!!!!!!!!!!!!!! 버퍼 오버플로우에 대해 알려고 한다면 어셈블리어를 어느정도 간단히 알고 있어야 한다. 간단하게 어셈블리를 보자. cpu에는 범용 레지스터라는게 있다. 범주 이... (2010-01-20)
안드로이드 (Android)
안드로이드(Android)는 휴대전화기를 비롯, 모바일 디바이스를 위한 운영체제와 미들웨어 그리고 핵심 어플리케이션을 포함하고 있는 소프트웨어 스택이다. 안드로이드는 개발자들이 자바(Java) 언어로 어플리케이션을 작성 할 수 있... (2010-01-06)
증강현실(Augmented Reality, AR)
[http://www.youtube.c-om/watch?v=APQ2OxgCNzE] 광고이기에 과장된 모습이긴 하지만 실제로 증강현실은 현실의 세계와 화면의 세계가 혼재할수 있는 새로운 기술이라고 할수 있다. 증강현실(Augmented Reality, AR)은 가상현실(Vi... (2010-01-05)
UX란 무엇인가? 
UX란 사용자가 원하는 제품이 아닌 시스템을 만드는 과정이다. 코닥이스트만은 1988년, 기존의 카메라에 혁명을 일으켰다. 그는 기존의 광각판을 통해 현상하던 카메라에서 필름카메라로의 전환을 통해 대량 생산이 가능하게 했다... (2009-12-10)
어포던스 (Affordance)
어포던스 (Affordance)의 뿌리말 Afford는 원래 '~할 여유가 있다, ~하여도 된다, ~을 공급하다, 산출하다'라는 뜻을 가지고 있으나 보통 사전에 없는 뜻으로 인간 컴퓨터 상호작용, 인지 심리학, 산업 디자인, 인터렉션 디자... (2009-08-11)
Usability
사용성(Usability, 유저빌리티)어떤 도구나 인간이 만든 물건, 서비스를 어떤 특정 목적을 달성하기 위해 사용할 때에 어느 정도 사용하기 쉬운가를 말하는 용어이다. 전자 제품이나 정보를 전달하기 위한 문서, 사람들이 일상생활... (2009-05-16)

