Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- gpio
- uart 통신
- prescaling
- structural modeling
- Edge Detector
- vivado
- dataflow modeling
- java
- Algorithm
- stop watch
- hc-sr04
- D Flip Flop
- pwm
- atmega 128a
- behavioral modeling
- FND
- test bench
- LED
- i2c 통신
- ATMEGA128A
- DHT11
- Recursion
- Pspice
- verilog
- soc 설계
- Linked List
- BASYS3
- ring counter
- half adder
- KEYPAD
Archives
- Today
- Total
거북이처럼 천천히
구조체의 메모리 공간 크기 본문
1. Padding byte
- 시스템은 데이터를 빠르게 읽고, 쓰기 위해서 메모리 공간을 일정한 크기 단위로 접근한다.
- 하지만, 구조체는 여러 종류의 자료형을 포함하기 때문에 일정한 크기 단위로 접근하여 데이터를 읽고, 쓰기 힘들다.
- 이로 인해 구조체의 맴버를 빠르게 읽고, 쓰기 힘들다.
- 따라서 구조체의 맴버를 일정한 크기 단위로 빠르게 읽고, 쓰기 위해 (= 일정한 크기 단위로 접근하기 쉽게 만들기 위해) 맴버들 사이에 Padding byte를 넣어준다.
2. Byte alignment
- 구조체의 맴버를 읽고, 쓰는 과정에서 빠르게 수행하기 위해 메모리에서 일정한 크기를 갖고 접근하는데, 이 일정한 크기대로 읽기 편하게 구조체 맴버 간에 Padding byte를 넣는 과정을 Byte alignment라 한다.
3. Q) 메모리를 일정한 크기 단위를 갖고, 구조체의 맴버를 Read / Writer 한다고 했는데, 그 때의 일정한 크기 단위는 어떻게 되는가?
- 구조체의 맴버를 빠르게 read / write 하기 위해 일정한 크기 단위로 접근하는데, 이때의 크기 단위는 구조체의 맴버 중 가장 큰 메모리 공간 크기를 갖는 자료형을 기준으로 삼는다.
- 따라서 구조체가 갖는 메모리 공간의 크기는 단순히 각 맴버 자료형의 합이 아니라 시스템이 자동적으로 구조체 맴버 중 가장 큰 자료형을 기준으로 Padding byte를 적용한 메모리 공간 크기이다.
4. 예시를 통한 구조체의 메모리 공간의 크기
- 아래 예시와 같이 student 구조체는 다양한 자료형을 맴버로 갖고있다.
- student 구조체 중에서 메모리 공간을 크게 갖는 자료형은 double이다.
- 따라서 double형을 기준으로 8byte단위로 구조체를 읽기 때문에 위 그림의 오른쪽처럼 메모리 공간을 갖게 되며, 따라서 구조체의 메모리 공간의 크기는 총 32byte가 된다.
- 그러나, 임베디드 시스템처럼 메모리 공간이 한정적인 환경에서 메모리 공간 사용을 최소화하고 싶다.
- 이 경우에는 "어떻게 구조체 맴버를 배치하느냐?"에 따라서 동일한 구조체 맴버를 갖더라도 다른 메모리 공간을 사용한다.
- 이전 예시와 동일한 구조체 맴버를 갖지만, 개선된 student 구조체는 24byte 메모리 공간을 갖는다.
- 8byte 기준 공간에 맞게 구조체 맴버를 배치했기 때문에 Padding byte가 최소화 되어 구조체 전체의 메모리 공간도 최소화 되었다는 것을 확인할 수 있다.