메모리를 막 할당하고 해제하다보면 메모리 프래그멘테이션이 생기잖아여
그래서 메모리 풀도 만들어서 막 쓰고
그런데
우리가 프로세스에서 접근하는 메모리는 기본적으로 운영체제가 할당해주는 가상 메모리 아닙니까?
물론 특정 방식에 의하여 가상 메모리 -> 물리 메모리로 맵핑이 되지만요
그렇지만, 가상 메모리는 일종의 블락(4KB단위라든지)으로 이루어져있고,
가상 메모리에서의 연속성이 물리메모리에서의 연속성의 보장으로 이어지지는 않잖아여.
그러면 메모리 풀이란것도 블락 단위로 만들면될 것 같은데...
제 의식의 흐름이 맞아염?
메모리 풀 이란 것도 부터 미스. 그 앞은 맞음.
물리적으로 잘게 쪼개져 있는 연속성이 부족한 메모리를, 운영체제가 가상메모리로 만든 공간이 32비트 기준 4GB 거기서 OS 가 사용하는 영역이 2GB 나머지 2GB 중 가상공간에서 연속한 메모리 최대치가 약 700MB ~ 1GB ( 시스템 마다 다름 )
이때 메모리 풀을 필요한 최대치 만큼 한 방에 할당해서 가져가는게 유리하다고 봄. 블락 단위라는게 니가 인위적으로 단편화 시키겠다는 소리 밖에 안됨.
왜냐하면 흔히 malloc 같은걸 하면 할당되어 넘어오는 주소 바로 앞 주소에 할당된 메모리의 크기 정보가 paragraph 단위로 저장되곤 하거든.
즉 가용 메모리가 1KB 가 있다면, 니가 작게 잘라서 할당할 경우 총량이 1KB 에 훨씬 못미치게 된다.
어플리케이션 작성자 입장에선, 어플리케이션 시각으로 보는게 맞음. 가상 메모리 <-> 물리 메모리는 OS가 해주는거지만, 메모리 풀은 보통 어플리케이션에서 가상메모리를 대상으로 관리하도록 작성함. 즉 할당한 가상메모리를 즉각즉각 해제하지 않고 재사용을 하거나, 커다란 가상메모리를 미리 할당한 후 어플리케이션에서 필요로하는 메모리 단위로 쪼개어 사용 하는 형태로 구현함
호오 - dc App