본문 바로가기
반응형

언어51

[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.
[js] 2차원 이상 객체의 복사 (얕은 복사 vs 깊은 복사) 1차원 객체일 때는 깊은 복사가 되는 방법들이 2차원 이상부터 내부객체에 대하여 깊은복사가 이루어지지 않을 때 해결하는 방법 얕은 복사 (Shallow copy)란? - 주소 값을 복사하기 때문에 참조하고 있는 실제 값이 같아 원본과 복사본이 서로 영향을 받는다. 깊은 복사 (Deep copy)란? - 실제 값을 독립적인 새로운 메모리 공간에 복사, 참조를 공유하지 않아 원본과 복사본이 서로 영향을 받지 않는다. 2023.02.16 - [개발 용어 정리] - [개발용어] 얕은 복사(Shallow Copy)와 깊은 복사(Deep Copy) [개발용어] 얕은 복사(Shallow Copy)와 깊은 복사(Deep Copy) 얕은 복사(Shallow Copy)와 깊은 복사(Deep Copy) A = 원본 B = .. 2023. 6. 28.
[js, ts] number타입 전화번호 배열 string타입으로 바꾸기(' - '삽입) JavaScript에서 number타입 전화번호 string타입 배열 전화번호로 바꾸기 - map과 정규식을 사용하여 변환한다. 코드 const holidays = [ 20230101, 20230121, 20230122, 20230123, 20230124, 20230301, 20230505, 20230527, 20230529, 20230606, 20230815, 20230928, 20230929, 20230930, 20231003, 20231009, 20231225, ]; const transformHolidays = (number: Number[]) => { let newArray: string[] = []; number.map((e, i) => { newArray[i] = e .toString() ... 2023. 5. 2.
[js] e.preventDefault(), e.stopPropagation(), e.stopImmediatePropagation() JavaScript에서 Event의 중지 관련 e.preventDefault() VS e.stopPropagation() VS e.stopImmediatePropagation() Event.preventDefault() 1. Event 인터페이스의 preventDefault()메서드는 어떤 이벤트를 명시적으로 처리하지 않은 경우, 해당 이벤트에 대한 사용자 에이전트의 기본 동작을 실행하지 않도록 지정한다. 2. preventDefault()를 호출한 이벤트도 preventDefault이벤트를 받는 요소 중 하나에서 stopPropagation() 또는 stopImmediatePropagation()을 호출하기 전까지는 다른 이벤트와 마찬가지로 전파된다. 3. cancelable: true 없이 Event.. 2023. 4. 28.
[js, Next.js] <input> 한글 입력 후 엔터 시 중복 이벤트 발생 문제 JavaScript, Next.js에서 한글 입력 후 엔터 시 중복 이벤트 발생 문제가 생기는 이유 js혹은 Next.js의 태그에서 숫자 혹은 알파벳 입력 후 엔터 시 이벤트 발생 순서 (onKeyDown, onKeyPress, onKeyUp) - 숫자 혹은 알파벳 입력시 발생 순서: keydown => keypress => keyup - 엔터 입력시 이벤트 발생 순서: keydown => keypress => keyup * 한글 입력시 한글 입력시 발생 순서: keydown => keyup 엔터 입력시 이벤트 발생 순서: keydown => keyup => keydown => keypress => keyup 빨간색 글씨 keyup과 keydown에서 isComposing속성이 true(keyCode .. 2023. 4. 27.
반응형