본문 바로가기
반응형

언어/C, C++6

[C++] #define, constexpr, PROGEM 비교 #define vs constexpr vs PROGEM#define, constexpr, 그리고 PROGMEM은 C++ 및 임베디드 프로그래밍에서 상수를 정의하고 메모리를 관리하는 데 사용되는 방법이다.이들은 각각 상수 정의, 컴파일 타임 평가, 메모리 최적화 측면에서 차이점이 있다.임베디드 환경에서의 어떤 상황에서 가장 적합한지 정리한다.비교 요약(표)특징#defineconstexprPROGEM타입 안전성낮음높음보통컴파일 타임컴파틸 타임 치환컴파일 타임 평가컴파일 타임 설정메모리 사용텍스트 치환 (작음)플래시/레지스터 (작음) 플래시 메모리 (RAM 절약)스코프관리없음 (전역적)있음 (지역적 가능)전역적읽기 속도빠름빠름느림 (플래시 읽기 필요)코드 복잡성낮음보통높음제한된 임베디드 환경에서의 추천1. 작.. 2024. 10. 27.
[C++] PROGEM PROGMEM이란?PROGMEM은 AVR 마이크로컨트롤러(예: Arduino)에서 RAM이 아닌 플래시 메모리에 상수 데이터를 저장하기 위해 사용되는 키워드이다.예시const uint8_t myArray[4] PROGMEM = {1, 2, 3, 4}; 장점1. RAM 절약- PROGMEM을 사용하면 상수 데이터를 플래시 메모리에 저장하므로, RAM 사용량을 크게 줄일 수 있다. - 이는 RAM이 제한적인 임베디드 환경에서 매우 유리하다. 2. 큰 데이터 구조 저장 가능 - 큰 배열이나 문자열과 같은 데이터 구조를 플래시 메모리에 저장할 수 있어, 메모리 자원을 효율적으로 사용할 수 있다.단점1. 읽기 복잡성 -  PROGMEM으로 저장된 값은 직접 읽을 수 없으며, pgm_read_* 함수를 사용해야 하.. 2024. 10. 26.
[C++] constexpr constexpr이란?constexpr은 C++11부터 도입된 키워드로, 컴파일 타임에 상수 값을 평가하여 정의할 수 있게 한다.예시constexpr TickType_t US_DELAY = 250; 장점1. 타입 안전성- constexpr은 타입이 있는 상수를 정의하므로, 컴파일 타임에 타입 검사를 할 수 있다.- 이는 코드의 안정성과 디버깅의 용이성을 높인다. 2. 컴파일 타임 평가 - 컴파일 타임에 값이 결정되므로, 최적화가 잘 이루어진다. - 상수 값은 실행 중 메모리를 차지하지 않고, 플래시 메모리나 레지스터에 직접 저장될 수 있다. 3. 스코프 관리 가능 - constexpr은 변수가 선언된 스코프 내에서만 유효하므로, 전역 변수와 지역 변수를 효과적으로 관리할 수 있다. 단점1. 복잡한 .. 2024. 10. 25.
[C++] #define #define이란?#define은 전처리기 지시어로, 컴파일러가 코드를 컴파일하기 전에 상수를 정의하거나 간단한 매크로를 사용할 수 있게 한다.예시#define US_DELAY 250장점1. 단순성 - 매우 간단하게 상수를 정의할 수 있으며, 복잡한 구문이 필요하지 않다. 2. 코드 크기 감소 - 컴파일러가 #define을 텍스트 치환으로 처리하기 때문에, 코드 크기를 줄이는 데 유리할 수 있다. 3. 어디서든 사용 가능 - 전처리기 단계에서 치환되므로, 어디서든 동일한 값을 사용할 수 있다.단점1. 타입 안전성 부족 - #define은 타입을 지정하지 않으므로, 잘못된 타입으로 사용될 가능성이 있다. - 예를 들어, #define으로 정의된 상수는 타입이 없기 때문에, 타입 검사나 오류 메시지가 부족할.. 2024. 10. 24.
[C, C++] 모든 타입 정리 uint8_t, uint16_t, uint32_t, uint64_t vs int8_t, int16_t, int32_t, int64_t, bool, char, unsigned char, short, unsigned short, int, unsigned int, long, unsigned long, long long, unsigned long long, float, double long, double wchar_t 정리  1. uint8_t, uint16_t, uint32_t, uint64_t vs int8_t, int16_t, int32_t, int64_t는 왜 사용하는 것인가?C언어의 기본 자료형으로 char, short, int, long 등이 있지만 몇비트 머신이냐에 따라 모호하기 때문에, 비트가 명.. 2024. 4. 24.
[C++] constexpr이란? const와 constexpr의 차이 ( const vs constexpr ) constexpr 이란? 1. 컴파일 시간 상수를 만드는 키워드 2. 컴파일 시간에 결정되는 상수 값으로만 초기화 할 수 있다. 3. constexpr 은 C++11에 처음 나왔으며 C++14 에서 개선된 기록이 있다. C++에서 const와 constexpr의 차이 ( const vs constexpr ) 상수에는 아래 2가지가 존재한다. 1. 컴파일 시간에 알 수 있는 상수 2. 컴파일 시간에 알 수 없는 상수(런타임에 알 수 있는 상수) 컴파일 시간에 알 수 있는 상수를 컴파일 시간 상수 (compile-time constant)라고 하고, 컴파일 시간에 알 수 없는 상수 즉 실행시간에 알 수 있는 상수를 런타임 상수(runtime constant)라고 한다. const는 컴파일 시간에 알 수 있는.. 2024. 1. 8.
반응형