초안 : GGWABaeGi @김민수

2024년 6월 14일 오전 12:00 (GMT+9)

struct, class 내부에 멤버들이 있을 때, 이 멤버들은 어떻게 메모리 공간을 차지하게 될까?

struct Padding

구조체를 정의할 때 컴파일러가 멤버 사이에 추가 byte를 삽입해 메모리 내 데이터의 정렬을 보장하는 메모리 액세스 및 정렬 최적화 기법이다.

프로세서는 한번에 정해진 만큼의 일을 할수있는데, 86, 64는 각각 4byte, 8byte의 1사이클을 돌아 메모리에 접근한다.

why 64x 86x architecture paddin is same?

64, 86 아키텍처 모두 데이터 정렬 요구사항이 비슷하며, 아키텍처 일관성 보장을 위해 패딩 결과가 비슷하게 나온다.

위와같이 정의된다고 했을 때, 구조체 패킹에 의해 결과값은 맨 위의 사진과 같이 컴파일러가 추가 byte를 삽입하고 c 변수의 공간을 마지막 4byte에 정의해줄 것이다.

만약 구조체 내의 멤버 변수가 순서를 바뀐 채 정의된다면 어떻게 될까?

variable

#include<iostream>
using namespace std;
struct abc {
	char a; // 1
	char b; // 1
	int c; // 4
};

struct bcd {
	char a; // 1
	int c; // 4
	char b; // 1
};

int main() {
	abc d;
	bcd e;
	printf("%d\\n", sizeof(d));
	printf("%d\\n", sizeof(e));
}

result: 8 12