C, C++ 코드 성능을 확인하거나 동작 방식을 로우 레벨에서 확인해야할 때 어셈블리 코드를 직접 보는 것이 도움된다. Visual Studio 에서는 컴파일된 어셈블리 코드를 확인할 수 있는 창을 제공한다.
디스어셈블리 코드 창 사용 설정
디스어셈블리코드 창을 사용하기 위해선 먼저 설정이 필요하다. Visual Studio에서 도구 > 옵션 > 디버깅 > 일반 > '주소 수준 디버깅 사용' 을 체크한다.
디스어셈블리 코드 확인 방법
작성한 코드에 중단점을 걸고 디버그 모드로 실행한다. 중단점은 F9 키로 설정 가능하며, 디버그 모드는 F5 키를 누르면 된다. 코드가 컴파일 이후 실행되고, 중단점에 제어가 걸려 있을 때 디스어셈블리 창을 실행한다.
디스 어셈블리 창은 디버그 > 창 > 디스어셈블리를 클릭하면 실행된다. (단축키는 Ctrl + Alt + D)이다.
설정 및 실행이 정상적으로 이루어 졌다면 다음과 같은 디스 어셈블리 코드를 볼 수 있다. 코드 라인 별 어셈블리 코드를 볼 수 있고, 13 line return 코드에 중단점이 걸려 있는 것도 확인할 수 있다.
나는 임베디드 C 최적화를 위해 디스 어셈블리 코드 확인이 필요 했다. 위 예시로 든 코드는 배열과 포인터의 접근 속도 비교를 위한 테스트 코드 이다.
문자열에 접근하여 값을 수정할 때, 배열로 접근하는 7 line과 포인터로 접근하는 8 line의 코드 수행 시간을 비교하는 것인데, 8line의 디스 어셈블리 코드를 보면 1줄 더 긴 것을 알 수 있다. 이는 포인터 변수로 메모리 접근 시, 포인터 변수에 접근 후 저장된 메모리로 한번 더 이동해야 하므로 수행 시간이 더 소모되는 것을 알 수 있다.
이렇게 C, C++ 코드를 최적화 할때나 코드의 동작을 로우레벨에서 확인해야 할 때 디스 어셈블리 창은 좋은 도구가 되므로 참고해두자.
'개념공부 > C, C++, IDE' 카테고리의 다른 글
[C++] 타입 추론 auto, for loop auto (0) | 2024.07.04 |
---|---|
2차원 Vector Sort 방법 (0) | 2023.08.10 |
[C언어] 변수의 유효 범위 (variable scope) (0) | 2023.07.03 |
Bitwise Operation, Operator (비트연산) (0) | 2023.01.17 |
[C++ STL] unordered_map (0) | 2023.01.16 |