본문 바로가기
DSP, MCU/STM32 (ARM Cortex-M)

STM32 ] 힙 heap , 스택 Stack 메모리 사이즈 설정하는 법

by eteo 2022. 6. 30.

 

 

 

 

MX툴에서 Project Manager - Project - Linker Settting 에서 설정할수 있다.

 

byte 단위로 디폴트 값은 아래와 같다.

 

Heap Size 512 byte

Stack Size  1,024 byte

 

Build Analyzer 를 통해 램 사용량은 확인하고 필요에 따라 조정해 주면 된다.

 

 

 

저 값을 조정하고 Code generate를 하면 STM32F429ZITX_FLASH.ld 파일의 아래 부분이 수정된다.

 

 

 

 

다만 여기서 수정하는 것은 Minimum Heap Size, Minimum Stack Size일 뿐이며 Heap과 Stack의 고정된 크기를 의미하지는 않는다.

 

알다시피 Heap은 램에서 .data와 .bss 영역 뒤에서부터 시작해 사용되면 위로 쌓이고 Stack은 램의 끝 주소에서 부터 시작해 사용되면 아래로 쌓인다. 런타임에선 Heap과 Stack이 할당과 해제를 반복하며 유동적으로 영역을 사용하며 Heap Pointer와 Stack Pointer가 서로 만나지 않는한은 얼마든지 계속 메모리를 사용할 수 있고, 혹시라도 둘이 만나게 되면 Stack Overflow가 되는 것이다. 

 

해당 세팅이 존재하는 목적은 개발자가 애플리케이션의 메모리 사용량을 미리 예측하여 그 Minimum값을 링커 스크립트(.ld)파일에 써두면 빌드 시간에 해당 용량이 램의 케파를 초과하는지 미리 잡아내기 위함인 듯 하다.