꽃미남 프로그래머 김포프가 창립한 탑 프로그래머 양성 교육 기관 POCU 아카데미 오픈!
절찬리에 수강생 모집 중!
프로그래밍 언어 입문서가 아닌 프로그래밍 기초 개념 입문서
문과생, 비전공자를 위한 프로그래밍 입문책입니다.
jobGuid 꽃미남 프로그래머 "Pope Kim"님의 이론이나 수학에 치우치지 않고 실무에 곧바로 쓸 수 있는 실용적인 셰이더 프로그래밍 입문서 #겁나친절 jobGuid "1판의내용"에 "새로바뀐북미게임업계분위기"와 "비자관련정보", "1판을 기반으로 북미취업에 성공하신 분들의 생생한 경험담"을 담았습니다.
Posted by 친절한티스

구조체의 멤버 변수를 정렬하는 것만으로도 구조체의 크기가 달라진다는 거 아시나요? 아래와 같이 구조체에 여러 타입들을 섞어서 썼을 경우 구조체 사이즈를 알아보겠습니다.

struct StructNonSorted
{
	bool bool1;
	int int1;
	int int2;
	bool bool2;
	char char1;
	int int3;
	char char2;
	int int4;
	char char3;
	int int5;
	bool bool3;
	int int6;
	bool bool4;
};



다음은 타입별로 멤버 변수를 정렬시켰을때의 구조체 크기를 살펴 보겠습니다.


struct StructSorted
{
	bool bool1;
	bool bool2;
	bool bool3;
	bool bool4;
	char char1;
	char char2;
	char char3;
	int int1;
	int int2;
	int int3;
	int int4;
	int int5;
	int int6;
};



무려 16이나 차이가 납니다. 왜이런 차이가 생길까요? VisualStudio C++의 경우 컴파일러 기본 옵션에 구조체 멤버 정렬 옵션(/Zp)이 8바이트로 정렬됩니다. 그래서 맨 처음 보여드린 구조체와 같이 정렬 되지 않은 상태인 경우 아래와 같이 중간에 패딩이 들어가게 됩니다. 그러면 그만큼 공간 낭비가 되고, 구조체의 크기가 커지게 되는 것이죠.



반대로 구조체를 크기 별로 정렬을 하면, 아래와 같이 8바이트 공간 안에 알차게 데이터가 들어가게 됩니다. 공간 낭비가 줄어들고, 그 만큼 구조체의 크기는 작아지게 되는 것이죠. 구조체의 크기가 작아지고 변수들이 정렬 되어있으면 메모리 친화적이게 되고, 캐싱 적중률도 높아지게 됩니다.


반응형
,