메모리 사용과 성능에 대한 잡설.

픽셀단위나 벅텍스 단위 억세스에선 명령어 한클럭 줄이는것도 상당히 중요하다. 이건 성능에 있어 결코 무시할 수 없는 요소이다.
이런것들을 제외하고 보면 전체적으로 성능을 떨어뜨리는 가장 큰 요인은 메모리 동적할당이다. 그러니까 힙으로부터 메모리를 할당받는 malloc,free,new,delete가 되겠다.
당연히 단편화를 줄이기 위해 힙사용을 줄이면 할당/해제 속도가 빨라진다.
미리 메모리를 pool로 잡아두고 쓰는쪽이 메모리 낭비가 심할것 같지만 경험적으로 보면 메모리 풀을 사용하는 쪽이 메모리 낭비가 오히려 덜하다. 동적할당시 메모리 오버헤드가 적지 않고, 더 문제는 단편화로 인한 낭비가 심하다. STL로 인한 동적할당이든 명시적 동적할당이든 동적할당을 줄이면 메모리 사용량이 줄어든다.
메모리 사용량을 줄이면 억세스하는 메모리 범위가 줄어들어서 캐시 히트율이 높아진다. 메모리 풀로부터 할당 받는 경우 각 메모리 블럭이 인접해있을 가능성이 높아지므로 캐시 히트율이 높아진다. 링크드 리스트라도 각 노드를 할당할때 제한된 사이즈의 메모리 풀로부터 할당하면 배열 못지않게 캐시 히트율이 높아진다.
경험적으로 보면 빠른 코드를 작성하려고 하기보다 메모리를 적게 먹는 코드를 작성하려고 노력하면 결과적으로 전체적인 성능도 빨라졌던것 같다.


메모리 사용과 성능에 대한 잡설.”에 대한 답글 3개

  1. 안녕하세요! 평소에 유영천님의 글을 접하고 많은 영향을 받고 있는 학생입니다.
    현재 저도 2D 게임(C/C++/SDL API)을 만들어보고 있는데요. 유영천님께서 메모리를 관리할 때
    메모리풀로 하라고 자주 말을 하셨는데, 저도 제 게임에 적용을 해보고싶은데요.
    메모리풀에 관한 좋은 자료를(영어자료도 괜찮습니다) 알고 계시면 추천해주시면 감사하겠습니다.
    아니면 저도 검색해서 공부해보겠지만, 구현할 때 팁이라도 주시면 감사하겠습니다 ㅎㅎ

    좋아요

답글 남기기

댓글을 게시하려면 다음의 방법 중 하나를 사용하여 로그인 하세요:

WordPress.com 로고

WordPress.com의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

Twitter 사진

Twitter의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

Facebook 사진

Facebook의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

%s에 연결하는 중