본문 바로가기

분류 전체보기139

임베디드 C 프로그래밍 속도 최적화 - 분기문 최적화 1. 다중 분기문의 비교문에 공통된 연산이 있다면, 연산 결과를 변수에 저장하여 사용하자. 아래 코드는 다중 if 분기문이고 각 비교문은 동일한 연산이 반복되는 코드이다. 디스어셈블리 코드 컴파일해 보면, 비교문에 동일한 연산이 반복되는 것을 알 수 있다. 즉, 동일한 연산이 코드 크기를 증가시키고 속도를 떨어뜨리고 있다.  이를 개선하기 위해선, 반복되는 연산을 변수에 저장하여 비교문에서 사용하면 된다. 아래 코드와 같이 반복되는 연산을 미리 계산 후 변수 k에 저장한다. 그리고 비교문에서는 수식이 아닌 변수를 이용한다. 디스 어셈블리 코드를 보면 비교문의 어셈블리 코드 개수가 줄어든 것을 확인할 수 있다.2. 다중 if 문은 switch 문으로 변경을 고려해보자. 위에서 개선한 코드는 다중 if 문의.. 2024. 7. 14.
임베디드 C 프로그래밍 속도 최적화 - 변수 사용 최적화 1. 적절한 데이터 타입 선택이 중요하다. 임베디드 환경에서 프로세서는 가장 잘 다룰 수 있는 데이터 타입이 있는데 이를 네이티브 데이터 타입이라고 한다. 네이티브 데이터 타입은 해당 프로세서의 한 워드의 크기이다. 한 워드의 크기는 레지스터 크기와 같고 데이터 버스의 폭과 같다. 이는 어셈블리 레벨에서, 네이티브 데이터 타입을 사용하면 가장 적은 인스트럭션이 사용됨을 의미한다. 따라서 코드 크기가 줄어들고 속도 또한 빨라지게 된다.  예를 들자면, 32bit 프로세서의 경우 워드의 크기 = 레지스터의 크기 = 데이터 버스의 폭은 4 byte이다. 이때 double 자료형 변수를 읽어오려면 8 byte이므로 두번의 메모리 엑세스가 필요하다. 자연스레 속도는 감소하는 것이다.  그렇다면 4 byte 보다 .. 2024. 7. 11.
임베디드 C 프로그래밍 속도 최적화 - 포인터 최적화 1. 함수의 인자로 포인터를 사용해 속도를 향상하자. 구조체처럼 부피가 큰 것은 함수의 인자로 넘길 때 call by value, call by reference 중 어떤 방식을 사용해야 할까. 구조체를 함수의 인자로 넘기는 call by value의 경우, 인자를 복사해야 하므로 속도와 메모리 자원이 추가로 필요하다.반면, 포인터를 인자로 넘겨 call by reference 방식을 사용하면 속도 / 메모리 모두 이득을 볼 수 있다. 아래는 예시 코드 이다. int, float, char 변수를 멤버로 가진 구조체 Test가 있다. 이를 call by value와 call by reference 방식으로 foo, boo 함수에서 넘겨 받는 코드이다.#include void foo(struct Test .. 2024. 7. 10.
임베디드 C 연산 속도 최적화 방법들 C 연산 속도 최적화를 위해 사용 가능한 알고리즘 / 방법1. Hash Map 사용2. Graph 및 Tree 구조에서 Search 하는 문제로 변경 및 DFS / BFS / 다익스트라 알고리즘 사용LeetCode : 21013. Range 사용 & O(N^2)일 때, O(N logN) 정렬 사용LeetCode : 2580 2024. 7. 10.
[IDE] 비주얼 스튜디오 디스어셈블리 코드 확인 방법 C, C++ 코드 성능을 확인하거나 동작 방식을 로우 레벨에서 확인해야할 때 어셈블리 코드를 직접 보는 것이 도움된다. Visual Studio 에서는 컴파일된 어셈블리 코드를 확인할 수 있는 창을 제공한다.디스어셈블리 코드 창 사용 설정디스어셈블리코드 창을 사용하기 위해선 먼저 설정이 필요하다. Visual Studio에서 도구 > 옵션 > 디버깅 > 일반 > '주소 수준 디버깅 사용' 을 체크한다. 디스어셈블리 코드 확인 방법작성한 코드에 중단점을 걸고 디버그 모드로 실행한다. 중단점은 F9 키로 설정 가능하며, 디버그 모드는 F5 키를 누르면 된다. 코드가 컴파일 이후 실행되고, 중단점에 제어가 걸려 있을 때 디스어셈블리 창을 실행한다. 디스 어셈블리 창은 디버그 > 창 > 디스어셈블리를 클릭하면 .. 2024. 7. 8.
[C++] 타입 추론 auto, for loop auto auto 키워드 auto는 변수의 자료형을 대신에 사용하는 키워드 입니다. 자료형에 auto를 사용하면, 컴파일 시간에 변수의 자료형을 추론합니다.int x = 1; // 변수 x 의 자료형을 int로 선언해야 함auto x = 1; // 변수 x의 자료형을 컴파일 시간에 int로 추론함 auto 키워드의 장점 auto 키워드는 2가지 장점이 있습니다. 첫번째는 긴 변수명을 대체할 수 있다는 점입니다.vector>> str = Print(); // 자료형이 길죠?auto str = Print(); // 컴파일 시간에 Print 함수의 반환 자료형을 추론하므로,// 긴 자료형 작성이 불필요합니다. 두번째 장점은, 코드 수정이 용이합니다. 함수의 출력 자료형이 변경되더라도 함수가 호출된 모든 부분을 찾아 .. 2024. 7. 4.