GEMS

GEMS 1권(4)

알쿠미 2016. 1. 20. 19:20

프레임 기반 메모리할당

충분한 메모리 블록을 할당하고 위에 프레임 아래 프레임 해서 위에서는 내려오고 아래서는 올라오는 메모리 구조이다.


#define ALIGNUP( nAddr‘ ess, nBytes ) ( (((uint)nAddress) + \ (nBytes)-1) & (~((nBytes)-1)) ) 

이게 2의 제곱일때 제대로 작동한다.


먼저 생성된 메모리가 먼저 해제되어야 하는 메모리 할당 구조이다.

위에 프레임 아래 프레임 나눠서 다른 종류의 데이터를 할당하는 것이 좋다고 한다.


1.10 BitArray / 프록시 클래스?


1.11 체크섬? / 해킹을 막기위한 프로토콜을 얘기하는 것 같다.


1.2 assert

assert는 릴리즈에서는 호출되지 않으므로 assert안에서는 어떠한 값의 변경도 있어서는 안된다.

 1. 더 많은 정보를 집어 넣는다.

   assert( src != 0 && "VectorNormalize: src vectorpointer is NULL" );

   이렇게 하면 src != 0 && "VectorNormalize: src vectorpointer is NULL" 경고창에 이 문자가 뜨기 때문에 에러를 판별하기 쉽다.


  2. 좀더 많은 정보를 집어 넣는다.

    도달하지 말아야 할 곳에 assert(!"The code should never get here");

    이렇게 넣으면 된다.


  3. 좀더 편하게

    그냥 assert( 0, ""); 아래 , 이것으로 구분해두면 ""안에 있는 에러메세지만 표시된다.


  4. 커스텀 assert 만들기

    디버거 하에서 조건이 실패할 경우 소스파일안에 assert문이 아니라 assert.cnot 파일 안에서의 assert문으로 들어가게 된다.

    소스 파일의 assert문으로 들어가게 하기위한 custum assert구문을 제시한다.


  5. 특정 assert를 한번만 아니면 아예 실행안되게 할수도 있다.


  6. assert 대화상자에 스택정보를 표시할 수 있다.[Robbins99 참조]


  7. assert 대화상자에 클립보드에 스택내용을 복사하는 버튼을 만들자.

    일일이 내용을 적을 필요 없이 복사를 하자.


1.13 게임을 디버깅 할 때 요소들을 간단하게 표현하고 콘솔게임을 만들 때 어려운 디버깅을 쉽게 할 수 있는 기능.


1.14 프로파일링 - 게임을 디버깅함에 있어서 병목현상 등 여러 문제점을 수치로 표현하여 보기 쉽게 한 기능?


3.0 FSM 나중에 구현할 때 참조하자