본문 바로가기

Hardware/컴퓨터 구조

MCU의 메모리 및 SRAM 구조

메모리 구조

1. C 컴파일러

C 컴파일러는 메모리 영역을 4개의 Segment로 나누어 사용한다.

 

1) Code Segment

작성한 코드가 저장되는 영역

 

2) Data Segment

Static 변수 및 전역변수가 저장되는 영역

 

※ Reset 후에 각 Segment 영역을 설정한 뒤 Flash Memory에 있는 변수를 SRAM에 복사하는 방식으로 동작한다.

 

3) Heap Segment

동적 메모리가 할당되는 영역

 

4) Stack Segment

함수에 선언된 지역변수 또는 매개변수들이 저장되며, 서브 루틴 또는 인터럽트 서비스 루틴들이 Call 되었을 때 돌아가야 할 주소들을 저장하는 영역

 

※ 프로그램이 Booting 될 때 가장 먼저 Stack 영역부터 형성한다.

 

<참고>

서브 루틴: 반복되어 사용하는 것을 메모리에 한번 적재하여 여러 번 사용할 수 있도록 하는 방법

인터럽트 서비스 루틴: 인터럽트에 대응하여 특정기능을 처리하는 기계어 코드 루틴

 

2. MCU

1) Flash Memory

비 휘발성 메모리로 전원이 차단되어도 데이터가 사라지지 않는다.

 

2) SRAM

휘발성 메모리로 전원이 차단되면 데이터가 사라진다.

 


SRAM의 구조

 

1. Static Data(Data Segment)

Heap의 시작부분을 Stack을 향해 위로 밀어 넣고 이 공간을 영원히 차지한다.

 

2. Heap

동적으로 할당된 데이터로 인해 HeapStack 쪽으로(낮은 주소에서 높은 주소로) 증가한다. Static Data 영역과는 달리 Heap에서는 할당을 취소하여 공간을 확보할 수 있지만 이것이 반드시 Heap을 축소시키는 것은 아니다. Heap에서 그 위에 다른 동적 데이터가 있는 경우 Heap 상단은 이동되지 않으며, 이 경우 마치 치즈처럼 Heap 영역이 구멍으로 가득 차게 된다. 이를 Fragmented Heap이라고 부르며 위 그림과 같다.

 

3. Stack

모든 함수 호출은 StackHeap 방향으로 커지도록(높은 주소에서 낮은 주소로) Stack 프레임을 생성한다. Stack 프레임에는 함수에 전달된 모든 매개변수나 지역 변수가 포함되며, 이 데이터는 함수 내에서 사용할 수 있지만 함수가 종료되면 공간이 100% 회수된다.


<참고 자료>

https://m.blog.naver.com/tdrag/220588912907

 

[요점정리] Stack _ Heap_스택 과 힙

< C 언어 / Stack - Heap > ◆ C 함수가 호출 될 때  Stack Frame 이 형성된다 &nbs...

blog.naver.com

https://eteo.tistory.com/115

 

STM32 ] 메모리 영역 구분 ( Code, Data, BSS, Heap, Stack )

구분 내용 저장위치 사용 code = text 함수, 제어문, 상수 등 ROM 컴파일 시 크기가 결정되고 이후 변하지 않음 data 초기값이 있는 전역변수, 정적변수 ROM bss 초기값이 없는 전역변수, 정적변수 (0으로

eteo.tistory.com

https://learn.adafruit.com/memories-of-an-arduino/optimizing-sram

 

Memories of an Arduino

As your Arduino projects get more sophisticated, they tend to grow to the point where memory limitations can become a problem. This guide explains the different types of Arduino memory and how to use them most effectively.

learn.adafruit.com

https://blog.naver.com/PostView.naver?blogId=msyang59&logNo=220044343146

 

메모리 공간 : Memory Space

아두이노에서 사용할 수 있는 메모리 공간(Memory Space)은 아주 작습니다. ATmega328을 사용한 우노, ...

blog.naver.com