6. 메모리 정렬, 구조체 패딩, 스택 오버플로
난이도 하 해설 보기 →
문제
문제 6 — 메모리 정렬, 구조체 패딩, 스택 오버플로
면접 질문
-
"메모리 정렬(alignment)"이 무엇이고, CPU가 정렬을 요구하는(또는 선호하는) 이유는 무엇인가요? 정렬되지 않은 접근(misaligned access)은 어떤 문제를 일으킬 수 있나요?
-
구조체(struct)에서 "패딩(padding)"이 왜 생기는지 설명해보세요. 멤버 선언 순서에 따라 구조체 크기가 달라지는 예를 들고, 어떻게 하면 패딩을 줄일 수 있나요?
-
스택 오버플로(stack overflow)는 언제, 왜 발생하나요? 스택의 크기 제한과 대표적인 발생 원인(깊은 재귀, 거대한 지역 변수 등)을 설명해보세요.
응용 시나리오
게임 서버에서 한 틱에 수십만 개를 다루는 엔티티 구조체가 있습니다. 멤버를 다음처럼 선언했습니다.
struct Entity {
bool alive; // 1바이트
double posX; // 8바이트
bool visible; // 1바이트
double posY; // 8바이트
int id; // 4바이트
bool dirty; // 1바이트
};
- 이 구조체에 패딩이 어떻게 들어가는지 추정하고, 멤버 순서를 재배치하면 크기가 어떻게 줄어드는지 설명해보세요. 왜 이게 캐시/메모리 사용량에 중요한지도 함께 말해보세요.
- 또한 어떤 개발자가 처리 속도를 위해 깊은 재귀로 맵 전체를 순회하는 알고리즘을 작성했더니, 큰 맵에서 서버가 간헐적으로 크래시(스택 오버플로)합니다. 원인과 해결책을 제시하세요.
답안 작성
내 답안 · 자동 저장
직접 답을 작성한 뒤, 위 해설 보기에서 모범답안과 대조하세요.