22강에서 구조체와 포인터로 설명해주셨는데 패딩의 경우는 어떻게 되나요?
115
작성자 없음
StatInfo 라는 구조체를 활용해서 포인터 연산을 설명해주셨는데, 만약 구조체 생성부분에서 바이트 패딩을 주는 경우엔 포인터 연산 처리가 어떻게 되는지 궁금합니다.
답변 2
0
안녕하세요, 인프런 AI 인턴입니다. asdfasdfasdfasdf님.
구조체에서의 패딩과 포인터 연산에 대해 설명드리겠습니다. 구조체는 메모리 정렬(alignment)을 위해 패딩을 포함할 수 있으며, 이것은 구조체의 크기를 예상보다 크게 만들 수 있습니다. 이는 주로 성능 향상을 위해 CPU와 메모리 버스의 특성에 맞춰 메모리 접근이 효율적으로 이루어지도록 하기 위함입니다.
구조체 패딩이란?
구조체는 멤버들이 메모리에서 특정 바이트 정렬을 따르도록 강제하는데, 이를 위해 멤버들 사이에 공간(패딩)을 삽입할 수 있습니다. 예를 들어, 64비트 아키텍처에서는 8바이트단위로 정렬되는 것이 일반적입니다. 따라서, 만약 4바이트, 2바이트, 2바이트 정렬이 필요한 멤버들이 있다면, 총 크기는 8바이트가 아닌 12바이트가 될 수 있습니다.
포인터 연산에 미치는 영향
포인터 연산에 있어서 패딩은 직접적인 영향을 주지 않습니다. 그러나 구조체의 각 멤버에 접근할 시, 그 멤버의 시작 주소는 패딩 포함 이후의 주소가 됩니다. 따라서 구조체의 크기가 패딩에 의해 증가한 만큼, 다음 구조체 인스턴스를 가리키는 포인터는 그만큼 더 멀리 떨어지게 됩니다.
관련 자료로 “구조체 패딩 관련 질문입니다”에서 비슷한 사례를 다룬 질문이 있습니다. 이전 질문에서는 왜 패딩이 생기고 그것이 어떻게 메모리에 저장되는지를 설명하고 있습니다. 더 자세한 내용은 아래 링크에서 확인해 보세요:
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.
이 강의를 다 들으면 어떤 강의를 들어야 하나요?
0
97
2
문제집은 없나요 수업을 어떻게 들어야 할지 모르겠어요
0
159
2
동적배열 Vector의 push_back 함수에서 조건문 질문
0
102
1
디버깅할때 메모리보는법 단축키가 뭐죠??
0
131
1
113-충돌처리 강의에서 22:26 부근의 SetPos()를 적용해도 충돌되지 않고 뚫고 지나가게 됩니다.
0
111
1
SaveFile에서 크래시 발생하는 분들 체크해보세요
2
94
1
수업자료 확인 부탁드립니다.
0
125
3
explicit을 붙였을 때 빨간줄이 뜨는 이유가 맞는지 궁금합니다.
0
119
0
리소스 매니저 강의 18분 부근
0
100
1
[Service강의] owner -> shared_ptr
0
94
2
C#에서 생성자 관련 질문
0
99
2
특정 조건에서만 함수를 반환할 때
0
101
2
스택 empty
0
116
2
섹션4 배열실습 질문입니다.
0
155
1
섹션3 '파일분할' 강의 질문입니다.
0
108
1
Defines.h의 DECLARE_SINGLE관련 질문입니다.
0
128
1
세션8 우선순위 큐 pop함수의 Predicate 적용 관련 질문이 있습니다.
0
205
3
섹션9 함수 포인터 관련 질문입니다.
0
153
1
exercise_A 번 문제 해결방법에 대한 질문.
0
163
1
[강의명: virtual 소멸자] 자식 클래스의 소멸자에도 virtual 을 붙이시는 이유가 궁금합니다
0
224
2
Scene과 SceneManager 강의 수강 중 키보드 입력 오류
0
161
1
Window API 강의 수강 중 LARGE_INTEGER 타입 변환 오류
0
221
3
섹션15 스마트 포인터 20:00 질문이요!
0
142
1
55강 수업자료 빌드를 하면 이상합니다.
0
139
1





