검색결과 리스트
글
클래스 정적멤버
static 키워드란?
* 파일 범위에서 사용하면 변수가 다른 cpp에서 보이지 않고 사용되지 못하게 하고 오직 그 cpp에서만 보이게 된다.
* 함수 범위에서 사용하면 변수가 전역 변수이고 자동 변수가 아니지만 그 함수안에서만 보이게 한다.
* 구조체와 클래스 선언에서 사용하면 변수가 보통 멤버 변수가 아니라 전역 변수처럼 동작한다.
클래스에서 쓰인 static 키워드는 변수의 보이는 범위를 지정하지는 않는다.
대신 일반적인 멤버 변수처럼 각 인스턴스마다 존재할지, 아니면 클래스에만 존재해서 전역 변수 처럼 쓰일지 지정한다.
보이는 범위는 public, protected, private 키워드를 통해 결정된다.
클래스 전역변수는 클래스 네임스페이스에 포함되기 때문에 클래스 이름을 함께 사용해야 한다.
클래스 정적 변수를 위한 메모리는 반드시 cpp파일에 정의돼야 한다.
F32 Foo::sClassStatic = -1.0f; // 이런식으로 메모리 할당
1. 메모리 상의 객체 구조
struct Foo
{
U32 mUnsignedvalue;
F32 mFloatValue;
bool mSignedValue;
};
+0x0 |
mUnsignedvalue |
+0x4 |
mFloatValue |
+0x8 |
mBlooleanValue |
2. 메모리 정렬과 패킹
1. 바이트 정렬 객체는 어떤 메모리 주소에도 올 수 있다.
2. 2바이트 정렬 객체는 짝수인 주소에만 올 수 있다.
3. 4바이트 정렬 객체는 4의 배수가 되는 주소에만 올 수 있다.
4. 16바이트 정렬 객체는 16의 배수가 되는 주소에만 올 수 있다.
* 메모리 정렬이 중요한 이유는 메모리 정렬이 제대로 지켜진 데이터 블록만 읽고 쓸 수 있기 때문이다.
* 구조체 전체를 놓고 봤을 때는 멤버의 정렬 조건중 가장 큰 것이 그 구조체의 정렬 조건이 된다. 남는 메모리는 컴파일러가 패딩으로 채운다.
3. C++ 클래스의 메모리 구조
+0x0 |
A |
+sizeof(A) |
B |
가상함수가 있다면 가상함수테이블을 가리키는 vptr포인터 4바이트가 추가되고
이 vtable은 이 클래스가 선언하거나 상속하는 모든 가상 함수를 가리키는 포인터를 갖고 있다.
'게임 엔진 아키텍처 > 3장 엔지니어링 기초' 카테고리의 다른 글
에러감지와 처리 (0) | 2016.05.24 |
---|---|
C/C++ 메모리 구조 (1) | 2016.05.24 |
선언, 정의, 연결성 (0) | 2016.05.24 |
멀티바이트 데이터와 엔디언 (1) | 2016.05.24 |
수의 표현 (0) | 2016.05.24 |
RECENT COMMENT