Embedded

[C 언어] [Embedded] 메모리 동적 할당에 대해 (2)

Teodore 2023. 1. 19. 20:23
728x90

오늘은 지난글에 이어 Embedded system에서 메모리 동적할당을 대체하여 사용가능한 기법에 대해 적어보려 한다. 

먼저 지난 포스팅에서 말한 동적할당의 리스크는 아래와 같다.

 

1. 동적할당의 리스크

  1. 메모리 할당 실패에 따른 예외처리

    - malloc을 이용했을 때 NULL pointer를 반환받았을 경우 

  2. 디바이스 속도 저하

    - malloc에 의한 코드 동작 속도 저하로 잠재적 품질 리스크 발생

  3. 메모리 공간 예측 실패

    -  malloc으로 할당시 관리 테이블로 인해 할당받은 메모리보다 더 많은 점유로 인해 메모리 부족 현상 발생

 

2. 대체가능한 기법들

위의 리스크를 줄일 수 있는 기법들을 몇가지 소개하려 한다. 이러한 기법들은 내가 실제로 개발하면서 적용해본 것도 있고, 전문 서적 또는 전문가 자문을 통해 알게된 기법들도 있다.   

 

1. malloc 할당 실패를 대비한 코드 추가

  - Firmware boot후 일정 공간을 임의의 크기로 malloc하여 할당 받아놓는 방법이다. 

이것은 간단한 기법으로 null point 발생시 할당받았던 공간을 free하여 heap 영역의 여유 메모리를 생성하고 malloc을 retry함으로서 해당 구문에서 처리해야 하는 task를 완료시킨 후 사용자 또는 개발자를 위한 로깅등을 작성하는 등의 문제 발생 위치 및 시기 등 정보를 남길 수 있도록 한다. 

근본적인 해결책보다는 현장에서 발생할 수 있는 아주 위험한 상황을 회피할 수 있도록 해주고 재발방지 대책을 수립할 수 있도록 해주는 쉽지만 파워풀한 기법이다. 

 

2. heap 사용 코드 제거

  - 이것은 최종 최적화 단계에서 사용가능한 방법으로 모든 코드 개발이 완료된 뒤 heap을 아예 삭제하고 모든 데이터를 사용자가 미리 정의하여 사용하는 방식이다. 

세부적으로는 모든 변수 전달방식에 대해 static 전역변수를 추가하는 방식이 있을 수 있고, 아주 큰 메모리를 할당한 다음 직접 malloc을 대체하는 커스텀 라이브러리를 만들어 사용하는 방식이 있다. 

제품 난이도나 유저 시나리오 관리 용량에 따라 적절히 사용하면 좋을 것 같다. 

 

오늘 적은 내용은 나의 주관적 견해가 섞여 있기 때문에 얼마든지 생각이 다를 수 있음을 미리 적어놓고 마치려 한다. 

728x90

'Embedded' 카테고리의 다른 글

[C 언어] [Embedded] 메모리 동적 할당에 대해 (1)  (0) 2023.01.17
[C 언어] [Embedded] Endian mode  (0) 2023.01.14
[C언어] [컴파일러] [Embedded] 최적화와 오류에 대해  (0) 2023.01.11
방향  (0) 2023.01.07
Embedded  (0) 2023.01.06