일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- Sequential Search
- data_structure
- cpp
- adjacentElementsProduct
- C++
- codesignal
- almostIncreasingSequence
- markdown
- codesingal
- 파이썬 포렌식
- 10953
- 2750
- shapeArea
- 수 정렬하기
- recursion
- centuryFromYear
- 피보나치 수
- Daily Commit
- flask
- matrixElementsSum
- collections.deque
- til
- 2015 봄학기 알고리즘
- 파이썬머신러닝완벽가이드
- 백준
- Counting cells in a blob
- All Longest Strings
- Python
- baekjun
- Numpy
Archives
- Today
- Total
Introfor
Byte padding 본문
cpp을 처음 공부하면서 C에 대한 내용도 다시 복습하고 있다.
구조체 부분을 학습하면서 구조체는 사용자 정의 타입으로 여러 데이터 타입을 하나의 타입으로 지정할 수 있다.
그러면 이 구조체는 메모리에 어떠한 구조로 저장되는지 궁금하다. (궁금하지 않더라고 알면 좋다.)
위 소스코드를 아래에서 메모리와 매칭된 그림을 확인할 수 있다.
컴파일러는 프로그램의 속도를 향상시키기 위해 구조체를 메모리에 할당할 때 바이트 패딩(Byte Padding) 규칙을 사용한다. 이 규칙은 구조체 멤버 변수 중 크기가 가장 큰 멤버 변수를 기준으로 나머지 멤버 변수를 할당한다.
위 그림에서 보면 char, int, double 타입이 선언된 것을 알 수 있는데 이 중 8byte를 가지는 duble의 크기가 가장 크므로 double과 동일한 크기에 8byte를 할당해서 나머지 char, int 타입을 할당한다.
8byte에 char(1byte), int(4byte)로 할당하면 남은 3byte가 바이트 패딩이 된다. 그러면 위의 구조체가 선언되었을 시, 총 16byte를 사용한다는 것을 알 수 있다.
'Doing > C&C++' 카테고리의 다른 글
[Recursion] Counting Cells in a Blob (0) | 2020.07.30 |
---|---|
Recursion. 미로찾기 (0) | 2020.07.28 |
[data_structure] Linked List (0) | 2020.07.26 |
[Algorithm] sequential Search (0) | 2020.07.01 |
[C++] Reference (0) | 2020.06.29 |
Comments