기본 콘텐츠로 건너뛰기

라벨이 MEMORY인 게시물 표시

memory allocation의 비용

메모리 할당/해제에 당연히 어느 정도의 비용이 든다고는 알고 있었지만, V7에서의 눈에 띄는 성능 저하는 메모리 할당/해제의 문제라 생각하지 못할 정도였다. 몇 백개의 line,text들을 생성하는데 생성하는 것을 눈으로 확인할수 있을 정도로 속도가 느렸습니다. 메모리 할당/해제 대신에 배열을 사용하니, 정말 눈깜짝할 정도의 시간에 모든 line,text의 생성이 완료가 되었습니다. 아마도 mdl compiler의 메모리 할당/해제에 문제가 있는게 아닌가 합니다.

메모리 풀링

탑건매직 | 탑건매직 http://blog.naver.com/topgunmagic/120033903901 메모리 풀링? : 메모리 풀링이란 간단히 말해서 필요할때마다 new나 malloc을 사용하는것이 아니고, 필요한 만큼에 메모리를 미리 잡아두고 사용하는것을 말한다. 그럼 이것을 어따쓰냐.... 잦은 메모리 할당은 성능을 저하시킬수 있다. 따라서 한번에 미리 메모리를 잡아두고 사용한다면 성능면에서 매우 효율적일때 사용될수 있다. 위 MemPooler.h는 Edited from C8MemPool class (Hitel, gma 7 3) - 1CoinClear - 라는 사람이 만든건데, 메모리 풀링이 어떤식으로 돌아가는지 분석 해보도록 하자. 메모리 풀링은 언제 사용하나?? new와 delete가 빈번하게 반복 발생될때 메모리풀을 사용합니다. 게임에 사용자가 접속할때마다 사용자 객체를 new해주고 접속을 해제할때마다 delete를 해준다면 속도는 물론이고 메모리 단편화의 문제가 발생할 수 있기 때문에 시작할 당시 n개의 사용자 객체를 생성한뒤 접속할때 가져다 쓰고 접속을 해제할때 제거하지 않고 다시 사용할 수 있게 해주는 경우도 해당합니다. template<class Type> class MemPooler 템플릿 클래스를 사용하였습니다. 왜일까요? Type이 쓰이는 부분들을 일단 살펴 보도록 하겠습니다. m_nListBlockSize=sizeof(BlockNode)+sizeof(Type); 음...보시면 일단 사이즈를 잡는건데요. 그렇습니다. MemPooler 클래스 설계시 우리는 필요한 만큼의 메모리를 잡아야 하는데 이시점에서 이 필요한 만큼의 메모리가 어느정도인지 우리는 알수 없습니다. 이럴때 한번 사용했군요. Type* Alloc() 한 블럭을 사용할 시 사용가능한 메모리를 가리켜 그 주소를 리턴하는 함수인데요. 여기서 한블럭이라는건 차차 설명 하도록 하지요. 우리는 메모리풀링을 만들시 필요...

메모리 릭을 제거 하자 ( 펌 )

에스카플로네 | 에스카 http://blog.naver.com/redkain/70006086810 릭을 제거 하자 #1 프로그램을 개발 하면서 많은 어려움 중에 하나가 메모리 릭을 찾는 문제라 생각이 됩니다. 특히 필자는 메모리 릭 조차 해결 안하고, 필드로 출시했던 경험들도 있는데요.. 물론 사용에 문제는 없었습니다... 하지만,,, 정말루 정말루 이제는 이러면 안된다고 생각합니다.. 철든거 같습니다 ⌒⌒ 본 컬럼에서는 Microsoft Visual Studio .NET에서 제공하는 강력한 릭 찾는 디버깅 팁 몃가지를 설명합니다. 먼저 예제 작성을 하겠습니다. 비주얼 스트디오 2003을 실행시킨후에 새프로젝트를 클릭해주세요. Win32 콘솔 프로젝트를 선택후 확인 버튼을 클릭합니다. 기본 소스에서 메모리 릭을 표시하기 위하여, 몃 가지 작업이 필요합니다. MFC 사용이나 MFC 프로젝트 이용시에는 아래 설정이 필요하지 않습니다. 아래 설정은 출력창에 메모리릭이 발생했을 경우 표시하여 주는 기능을 합니다. 아래 헤더와 Define을 추가합니다. 반드시 순서를 지켜야합니다. #define CRTDBG_MAP_ALLOC #include <stdlib.h> #include <crtdbg.h> 덤프를 보고자하는 위치에서 아래 함수를 호출합니다. 아래 함수는 메모리릭이 발생한 위치를 덤프하여, 출력창에 표시합니다. _CrtDumpMemoryLeaks(); 아래는 완성된 전체 예제 입니다. #include "stdafx.h" // 아래 헤더가 추가 되었습니다. #define CRTDBG_MAP_ALLOC #include <stdlib.h> #include <crtdbg.h> void alloc() { // 여기서 메모리를 할당하고, free를 하지 않아 메모리 릭을 유발 합니다. ...