반응형
#define vs constexpr vs PROGEM
#define, constexpr, 그리고 PROGMEM은 C++ 및 임베디드 프로그래밍에서 상수를 정의하고 메모리를 관리하는 데 사용되는 방법이다.
이들은 각각 상수 정의, 컴파일 타임 평가, 메모리 최적화 측면에서 차이점이 있다.
임베디드 환경에서의 어떤 상황에서 가장 적합한지 정리한다.
비교 요약(표)
특징 | #define | constexpr | PROGEM |
타입 안전성 | 낮음 | 높음 | 보통 |
컴파일 타임 | 컴파틸 타임 치환 | 컴파일 타임 평가 | 컴파일 타임 설정 |
메모리 사용 | 텍스트 치환 (작음) | 플래시/레지스터 (작음) | 플래시 메모리 (RAM 절약) |
스코프관리 | 없음 (전역적) | 있음 (지역적 가능) | 전역적 |
읽기 속도 | 빠름 | 빠름 | 느림 (플래시 읽기 필요) |
코드 복잡성 | 낮음 | 보통 | 높음 |
제한된 임베디드 환경에서의 추천
1. 작고 정적인 상수
- constexpr이 가장 적합하다.
- 타입 안전성과 컴파일 타임 평가의 이점이 있다.
- RAM을 전혀 사용하지 않으므로 메모리 효율적이다.
2. 큰 배열 또는 정적 데이터
- PROGMEM을 사용하는 것이 유리하다.
- 이는 RAM을 절약하고, 플래시 메모리를 효율적으로 사용할 수 있게 한다.
- 다만, 읽을 때 pgm_read_* 함수를 사용해야 함을 유의해야 한다.
3. 단순한 상수 정의
- 작은 프로젝트나 빠르게 변하는 상수를 설정할 때는 #define도 여전히 유효한 방법이다.
- 다만, 타입 안전성과 유지보수성 측면에서 장기적으로는 constexpr이 더 나은 선택이다.
결론
1. 타입 안전성과 컴파일 타임 평가가 중요한 경우, 특히 작은 상수에는 constexpr을 사용하는 것이 가장 좋다.
2. RAM을 절약해야 하거나 큰 데이터를 저장할 필요가 있다면, PROGMEM을 사용하는 것이 좋다.
3. 단순한 정의와 빠른 개발이 필요한 경우라면, #define을 사용할 수 있다.
반응형
'언어 > C, C++' 카테고리의 다른 글
[C++] PROGEM (0) | 2024.10.26 |
---|---|
[C++] constexpr (0) | 2024.10.25 |
[C++] #define (0) | 2024.10.24 |
[C, C++] 모든 타입 정리 (0) | 2024.04.24 |
[C++] constexpr이란? const와 constexpr의 차이 ( const vs constexpr ) (0) | 2024.01.08 |
댓글