SlideShare uma empresa Scribd logo
1 de 10
[GPG2.1.10]드롭-인 디버그 메모리 관리자 [DevRookie]꽝매니아
개요 시작 메모리 관리자의 로그 기록 결과 보고 몇 가지 염두에 둘 것들 개선 방향 차례
점점 커져가는 게임 프로그램 점점 필요해지는 메모리 사용 관리 메모리 사용 상태에 대한 분석 기능을 요구 사용하기 편하게 만들어야 한다. 자료 분석을 위한 비용에 대한 부담을 줄여야 한다. 최소한 디버그 빌드나 매크로 정의 빌드로 분석한다. 개요
메모리 할당/해제 하는 new/delete 루틴을 오버로딩 한다. 오버로딩한 함수에서 필요한 정보를 받을 수 있게 #define 매크로 로메모리 명령문들을 재정의 한다. 책에는 Visual C++ 에서 정의하는 __FILE__, __LINE__ 을 사용한다. 이를 통해 메모리에 접근할 때 할당크기, 파일(__FILE__) 이름, 행번호 등을 받을 수 있게 한다. 시작
메모리 사용 정보를 연쇄 헤쉬 테이블에 저장한다. Chained hash table 이 뭐냐구요? (map + linked list) 할당 사이즈(주소), 앞뒤 여백, 할당 종류,  파일이름, 소스 라인등 정보를 구조체로 저장한다. 테이블에는 현재 할당된 메모리 정보들만 남게 해서, 프로그램 종료시 남은 구조체를 확인해서 누수를 확인한다. 메모리 할당 위치 앞뒤에 여백경계를 준 상태로 할당한다. 메모리 관리자의 로그 기록
여백 공간에 정해진 32비트 값을 채우고 해제할 때 값을 비교해서 침범했는지 확인한다. 메모리 관리자가 할당 용량, 실제 쓰인 용량(여백제외), 가장 큰 메모리 블록 정보 등을 관리한다. 경계 영역에 해당한 값으로 초기 할당값을 사용한다. 이렇게 하면 따로 경계 영역을 위한 기록을 할 필요가 없다. 그래서 내용에서는 32비트 long 값을 이용한다. 만약, 맞아 떨어지지 않으면 0xE나 static_cast로 초기화  메모리 관리자의 로그 기록
메모리 관리자가 해제될 때 결과를 기록한다. 메모리 관리자는 제일 먼저 생성되고 제일 나중에 소멸해야 된다. Visual C++ 에서는 헤더파일의 정적 개체를 코드 출현 순으로 생성하고, 반대 순서로 해제함을 이용한다. ::ateexit() 에 맨 먼저 등록해서 제일 나중에 호출되게 한다. 결과 보고
STL 을사용할때 헤더파일 순서로 인해 오류가 발생할 수 있으므로, 커스텀 할당/해제 매크로 헤더 파일을 #define, #undefine하는 헤더 2개를 사용한다. 처음엔 #undefine하고 난 다음에 STL 헤더를 include 하고 그 다음에 #define 하게 해준다. 몇 가지 염두할 점
MFC 처럼 자체적으로 메모리 할당/해제 루틴을 쓰는 라이브러리를 같이 쓰게 될 경우, 이때 사용하고 있는 메모리 관리자를 겹치지 않게 하기 위해 위 방법 처럼 #ifdef로 순서를 처리해준다. 몇 가지 염두할 점
상용 엔진에서는 어떻게 사용하고 있을까? Gamebryo에서 사용하는 NiMemoryTracker기능 실전 예제

Mais conteúdo relacionado

Destaque (20)

Alcholismo
AlcholismoAlcholismo
Alcholismo
 
Лекция № 3.Непредельные углеводороды.
Лекция № 3.Непредельные углеводороды.Лекция № 3.Непредельные углеводороды.
Лекция № 3.Непредельные углеводороды.
 
199 lonsmount
199 lonsmount199 lonsmount
199 lonsmount
 
Ghidul studentului ssmi
Ghidul studentului ssmiGhidul studentului ssmi
Ghidul studentului ssmi
 
Ebook lam chu_tu_duy_thay_doi_van_menh
Ebook lam chu_tu_duy_thay_doi_van_menhEbook lam chu_tu_duy_thay_doi_van_menh
Ebook lam chu_tu_duy_thay_doi_van_menh
 
สถาปัตยกรรมเครือข่าย
สถาปัตยกรรมเครือข่ายสถาปัตยกรรมเครือข่าย
สถาปัตยกรรมเครือข่าย
 
8/14反核與人權eeling
8/14反核與人權eeling8/14反核與人權eeling
8/14反核與人權eeling
 
Internet en Colombia
Internet en ColombiaInternet en Colombia
Internet en Colombia
 
Casos de uso igualacion
Casos de uso igualacion Casos de uso igualacion
Casos de uso igualacion
 
信息 Sunday Sermon 31/07/2011
信息 Sunday Sermon 31/07/2011信息 Sunday Sermon 31/07/2011
信息 Sunday Sermon 31/07/2011
 
Fotos inéditas do miguel 2
Fotos inéditas do miguel 2Fotos inéditas do miguel 2
Fotos inéditas do miguel 2
 
Verbs
VerbsVerbs
Verbs
 
Echo2012 Kort presentasjon
Echo2012 Kort presentasjonEcho2012 Kort presentasjon
Echo2012 Kort presentasjon
 
Yourprezi
YourpreziYourprezi
Yourprezi
 
present biogra bruji
present biogra brujipresent biogra bruji
present biogra bruji
 
DROGAS
DROGASDROGAS
DROGAS
 
Tolyatti correct
Tolyatti correctTolyatti correct
Tolyatti correct
 
Детский сад 303
Детский сад 303Детский сад 303
Детский сад 303
 
งานนำเสนอ155
งานนำเสนอ155งานนำเสนอ155
งานนำเสนอ155
 
Batang bata
Batang bataBatang bata
Batang bata
 

Semelhante a Gpg2 2 1_10_드롭인디버그메모리관리자

실전 DataSnap!
실전 DataSnap!실전 DataSnap!
실전 DataSnap!Devgear
 
Ndc2011 성능 향상을_위한_데이터베이스_아키텍쳐_구축_및_개발_가이드
Ndc2011 성능 향상을_위한_데이터베이스_아키텍쳐_구축_및_개발_가이드Ndc2011 성능 향상을_위한_데이터베이스_아키텍쳐_구축_및_개발_가이드
Ndc2011 성능 향상을_위한_데이터베이스_아키텍쳐_구축_및_개발_가이드cranbe95
 
Memcached의 확장성 개선
Memcached의 확장성 개선Memcached의 확장성 개선
Memcached의 확장성 개선NAVER D2
 
MySQL_SQL_Tunning_v0.1.3.docx
MySQL_SQL_Tunning_v0.1.3.docxMySQL_SQL_Tunning_v0.1.3.docx
MySQL_SQL_Tunning_v0.1.3.docxNeoClova
 
FIFA 온라인 3의 MongoDB 사용기
FIFA 온라인 3의 MongoDB 사용기FIFA 온라인 3의 MongoDB 사용기
FIFA 온라인 3의 MongoDB 사용기Jongwon Kim
 
From Java code to Java heap_SYS4U I&C
From Java code to Java heap_SYS4U I&CFrom Java code to Java heap_SYS4U I&C
From Java code to Java heap_SYS4U I&Csys4u
 
Django, 저는 이렇게 씁니다.
Django, 저는 이렇게 씁니다.Django, 저는 이렇게 씁니다.
Django, 저는 이렇게 씁니다.Kyoung Up Jung
 
김성훈 - 뛰어난 디버거가 되는 방법
김성훈 - 뛰어난 디버거가 되는 방법김성훈 - 뛰어난 디버거가 되는 방법
김성훈 - 뛰어난 디버거가 되는 방법성훈 김
 
Effective c++ chapter 1,2 요약
Effective c++ chapter 1,2 요약Effective c++ chapter 1,2 요약
Effective c++ chapter 1,2 요약Nam Hyeonuk
 
Fundamentals of Oracle SQL
Fundamentals of Oracle SQLFundamentals of Oracle SQL
Fundamentals of Oracle SQLJAEGEUN YU
 
Spark performance tuning
Spark performance tuningSpark performance tuning
Spark performance tuninghaiteam
 
리소스 중심의 서든어택2 실시간 메모리 프로파일링 시스템 개발기
리소스 중심의 서든어택2 실시간 메모리 프로파일링 시스템 개발기리소스 중심의 서든어택2 실시간 메모리 프로파일링 시스템 개발기
리소스 중심의 서든어택2 실시간 메모리 프로파일링 시스템 개발기Wonha Ryu
 
Effective c++ chapter1 2_dcshin
Effective c++ chapter1 2_dcshinEffective c++ chapter1 2_dcshin
Effective c++ chapter1 2_dcshinDong Chan Shin
 
Azure IaaS 기본 아키텍처 실습 (Script)
Azure IaaS 기본 아키텍처 실습 (Script)Azure IaaS 기본 아키텍처 실습 (Script)
Azure IaaS 기본 아키텍처 실습 (Script)Taeyoung Kim
 
C++ 코딩의 정석.pptx
C++ 코딩의 정석.pptxC++ 코딩의 정석.pptx
C++ 코딩의 정석.pptxsung suk seo
 
Visual C++10을 활용한 병렬 프로그래밍
Visual C++10을 활용한 병렬 프로그래밍Visual C++10을 활용한 병렬 프로그래밍
Visual C++10을 활용한 병렬 프로그래밍흥배 최
 

Semelhante a Gpg2 2 1_10_드롭인디버그메모리관리자 (20)

실전 DataSnap!
실전 DataSnap!실전 DataSnap!
실전 DataSnap!
 
Ndc2011 성능 향상을_위한_데이터베이스_아키텍쳐_구축_및_개발_가이드
Ndc2011 성능 향상을_위한_데이터베이스_아키텍쳐_구축_및_개발_가이드Ndc2011 성능 향상을_위한_데이터베이스_아키텍쳐_구축_및_개발_가이드
Ndc2011 성능 향상을_위한_데이터베이스_아키텍쳐_구축_및_개발_가이드
 
Memcached의 확장성 개선
Memcached의 확장성 개선Memcached의 확장성 개선
Memcached의 확장성 개선
 
Matlab guide
Matlab guideMatlab guide
Matlab guide
 
MySQL_SQL_Tunning_v0.1.3.docx
MySQL_SQL_Tunning_v0.1.3.docxMySQL_SQL_Tunning_v0.1.3.docx
MySQL_SQL_Tunning_v0.1.3.docx
 
FIFA 온라인 3의 MongoDB 사용기
FIFA 온라인 3의 MongoDB 사용기FIFA 온라인 3의 MongoDB 사용기
FIFA 온라인 3의 MongoDB 사용기
 
From Java code to Java heap_SYS4U I&C
From Java code to Java heap_SYS4U I&CFrom Java code to Java heap_SYS4U I&C
From Java code to Java heap_SYS4U I&C
 
Django, 저는 이렇게 씁니다.
Django, 저는 이렇게 씁니다.Django, 저는 이렇게 씁니다.
Django, 저는 이렇게 씁니다.
 
Exception&log
Exception&logException&log
Exception&log
 
김성훈 - 뛰어난 디버거가 되는 방법
김성훈 - 뛰어난 디버거가 되는 방법김성훈 - 뛰어난 디버거가 되는 방법
김성훈 - 뛰어난 디버거가 되는 방법
 
Effective c++ chapter 1,2 요약
Effective c++ chapter 1,2 요약Effective c++ chapter 1,2 요약
Effective c++ chapter 1,2 요약
 
Fundamentals of Oracle SQL
Fundamentals of Oracle SQLFundamentals of Oracle SQL
Fundamentals of Oracle SQL
 
엑셀왕국
엑셀왕국엑셀왕국
엑셀왕국
 
7 8 1
7 8 17 8 1
7 8 1
 
Spark performance tuning
Spark performance tuningSpark performance tuning
Spark performance tuning
 
리소스 중심의 서든어택2 실시간 메모리 프로파일링 시스템 개발기
리소스 중심의 서든어택2 실시간 메모리 프로파일링 시스템 개발기리소스 중심의 서든어택2 실시간 메모리 프로파일링 시스템 개발기
리소스 중심의 서든어택2 실시간 메모리 프로파일링 시스템 개발기
 
Effective c++ chapter1 2_dcshin
Effective c++ chapter1 2_dcshinEffective c++ chapter1 2_dcshin
Effective c++ chapter1 2_dcshin
 
Azure IaaS 기본 아키텍처 실습 (Script)
Azure IaaS 기본 아키텍처 실습 (Script)Azure IaaS 기본 아키텍처 실습 (Script)
Azure IaaS 기본 아키텍처 실습 (Script)
 
C++ 코딩의 정석.pptx
C++ 코딩의 정석.pptxC++ 코딩의 정석.pptx
C++ 코딩의 정석.pptx
 
Visual C++10을 활용한 병렬 프로그래밍
Visual C++10을 활용한 병렬 프로그래밍Visual C++10을 활용한 병렬 프로그래밍
Visual C++10을 활용한 병렬 프로그래밍
 

Mais de Young-jun Jeong

Mais de Young-jun Jeong (20)

Gpg2권]4 9 하늘상자
Gpg2권]4 9 하늘상자Gpg2권]4 9 하늘상자
Gpg2권]4 9 하늘상자
 
글꼴 렌더링 이야기
글꼴 렌더링 이야기글꼴 렌더링 이야기
글꼴 렌더링 이야기
 
점, 선, 면
점, 선, 면점, 선, 면
점, 선, 면
 
Kinect sdk사용하기
Kinect sdk사용하기Kinect sdk사용하기
Kinect sdk사용하기
 
Udk]static mesh & material
Udk]static mesh & materialUdk]static mesh & material
Udk]static mesh & material
 
Udk] sound (sound cue)
Udk] sound (sound cue)Udk] sound (sound cue)
Udk] sound (sound cue)
 
Udk] sound (sound cue)
Udk] sound (sound cue)Udk] sound (sound cue)
Udk] sound (sound cue)
 
삼각 함수
삼각 함수삼각 함수
삼각 함수
 
Gpg2 dll로부터 c++_클래스_내보내기
Gpg2 dll로부터 c++_클래스_내보내기Gpg2 dll로부터 c++_클래스_내보내기
Gpg2 dll로부터 c++_클래스_내보내기
 
[추천] 색인기법 김성현
[추천] 색인기법 김성현[추천] 색인기법 김성현
[추천] 색인기법 김성현
 
문자열 검색 (1)
문자열 검색 (1)문자열 검색 (1)
문자열 검색 (1)
 
[Gpg1권]skinning
[Gpg1권]skinning[Gpg1권]skinning
[Gpg1권]skinning
 
2010 독후감
2010 독후감2010 독후감
2010 독후감
 
Kinect pc
Kinect   pcKinect   pc
Kinect pc
 
Kinect pc
Kinect   pcKinect   pc
Kinect pc
 
정렬 알고리즘의 성능 분석
정렬 알고리즘의 성능 분석정렬 알고리즘의 성능 분석
정렬 알고리즘의 성능 분석
 
점근적 복잡도 분석
점근적 복잡도 분석점근적 복잡도 분석
점근적 복잡도 분석
 
알고리즘 기초사항
알고리즘 기초사항알고리즘 기초사항
알고리즘 기초사항
 
기초 알고리즘 스터디 소개
기초 알고리즘 스터디 소개기초 알고리즘 스터디 소개
기초 알고리즘 스터디 소개
 
Gpg1권] 4 5 3 d 충돌 검출
Gpg1권] 4 5 3 d 충돌 검출Gpg1권] 4 5 3 d 충돌 검출
Gpg1권] 4 5 3 d 충돌 검출
 

Gpg2 2 1_10_드롭인디버그메모리관리자

  • 1. [GPG2.1.10]드롭-인 디버그 메모리 관리자 [DevRookie]꽝매니아
  • 2. 개요 시작 메모리 관리자의 로그 기록 결과 보고 몇 가지 염두에 둘 것들 개선 방향 차례
  • 3. 점점 커져가는 게임 프로그램 점점 필요해지는 메모리 사용 관리 메모리 사용 상태에 대한 분석 기능을 요구 사용하기 편하게 만들어야 한다. 자료 분석을 위한 비용에 대한 부담을 줄여야 한다. 최소한 디버그 빌드나 매크로 정의 빌드로 분석한다. 개요
  • 4. 메모리 할당/해제 하는 new/delete 루틴을 오버로딩 한다. 오버로딩한 함수에서 필요한 정보를 받을 수 있게 #define 매크로 로메모리 명령문들을 재정의 한다. 책에는 Visual C++ 에서 정의하는 __FILE__, __LINE__ 을 사용한다. 이를 통해 메모리에 접근할 때 할당크기, 파일(__FILE__) 이름, 행번호 등을 받을 수 있게 한다. 시작
  • 5. 메모리 사용 정보를 연쇄 헤쉬 테이블에 저장한다. Chained hash table 이 뭐냐구요? (map + linked list) 할당 사이즈(주소), 앞뒤 여백, 할당 종류, 파일이름, 소스 라인등 정보를 구조체로 저장한다. 테이블에는 현재 할당된 메모리 정보들만 남게 해서, 프로그램 종료시 남은 구조체를 확인해서 누수를 확인한다. 메모리 할당 위치 앞뒤에 여백경계를 준 상태로 할당한다. 메모리 관리자의 로그 기록
  • 6. 여백 공간에 정해진 32비트 값을 채우고 해제할 때 값을 비교해서 침범했는지 확인한다. 메모리 관리자가 할당 용량, 실제 쓰인 용량(여백제외), 가장 큰 메모리 블록 정보 등을 관리한다. 경계 영역에 해당한 값으로 초기 할당값을 사용한다. 이렇게 하면 따로 경계 영역을 위한 기록을 할 필요가 없다. 그래서 내용에서는 32비트 long 값을 이용한다. 만약, 맞아 떨어지지 않으면 0xE나 static_cast로 초기화 메모리 관리자의 로그 기록
  • 7. 메모리 관리자가 해제될 때 결과를 기록한다. 메모리 관리자는 제일 먼저 생성되고 제일 나중에 소멸해야 된다. Visual C++ 에서는 헤더파일의 정적 개체를 코드 출현 순으로 생성하고, 반대 순서로 해제함을 이용한다. ::ateexit() 에 맨 먼저 등록해서 제일 나중에 호출되게 한다. 결과 보고
  • 8. STL 을사용할때 헤더파일 순서로 인해 오류가 발생할 수 있으므로, 커스텀 할당/해제 매크로 헤더 파일을 #define, #undefine하는 헤더 2개를 사용한다. 처음엔 #undefine하고 난 다음에 STL 헤더를 include 하고 그 다음에 #define 하게 해준다. 몇 가지 염두할 점
  • 9. MFC 처럼 자체적으로 메모리 할당/해제 루틴을 쓰는 라이브러리를 같이 쓰게 될 경우, 이때 사용하고 있는 메모리 관리자를 겹치지 않게 하기 위해 위 방법 처럼 #ifdef로 순서를 처리해준다. 몇 가지 염두할 점
  • 10. 상용 엔진에서는 어떻게 사용하고 있을까? Gamebryo에서 사용하는 NiMemoryTracker기능 실전 예제