Computer Architecture/CS APP [CS] switch문 내부 동작 원리 (Switch Statement) - switch문은 정수 인덱스 값에 따라 다중분기 기능을 제공한다. GCC는 case 값의 밀집도와 case의 수를 고려해서 switch문의 번역 방법을 선택한다. 장점 switch문을 사용하면 C 코드를 읽기 쉽게 해줄 뿐만 아니라 점프 테이블을 사용해서 효율적인 구현을 가능케 한다. 다단계의 if-else문을 사용하는 것보다 switch문을 실행하는 데 걸리는 시간이 case 수에 관계없다는 장점이 있다. 예제 (a)는 C로 구현한 간단한 switch문 예제 (b)는 (a)를 컴파일할 때 생성된 어셈블리 코드의 동작을 C로 나타낸 것 점프 테이블인 배열 jt는 7개의 원소를 가지고 있으며, 이들은 각 코드 블록의 주소다. jt의 비어있는 원소에는 default 블록 주소를 넣는다. 컴파일러는 먼저 인자 n에서 100을 빼서 범위를 0에서 6으로 만들어 index 변수에 삽입했다. index 변수는 unsigned로 하여 범위가 0~6인지를 검사하기보다 6보다 큰지를 검사하여 단순화 시켰다 코드 16번째 줄에서 jt를 역참조하는 goto문이 실행된다. 어셈블리 loc_A (.L3), loc_B (.L5), loc_C (.L6), loc_D (.L7), loc_def (.L8), done(.L2) jmp instruction의 operand(인자)는 *로 시작하며 간점 점프를 나타냄 operand는 index 값을 저장하는 레지스터 %rai가 메모리 위치를 지정하는 index로 사용된다. 점프 테이블 in 어셈블리 .rodata (Read-only Data)라고 부르는 목적코드 세그먼트 내에서7개의 quad(8바이트) 워드가 존재하고이들은 각각 어셈블리 코드 레이블들에 연관된 instruction 주소다. 『Computer Systems: A Programmer's Perspective』 책을 읽고 정리한 글입니다.검색을 허용하지 않고, 수익을 창출하지 않습니다. 공유하기 URL 복사카카오톡 공유페이스북 공유엑스 공유 게시글 관리 구독하기Second Step : 공부 블로그 Contents 장점 예제 어셈블리 점프테이블in어셈블리 당신이 좋아할만한 콘텐츠 [CS] 컴파일러의 최적화 성능과 한계 (Optimizing Compilers) 2023.12.21 [CS] 파이프라이닝의 일반 원리 (Pipelining) 2023.12.02 [CS] 버퍼 오버플로우와 공격 대응 기법 (Buffer Overflow) 2023.11.14 [CS] 부동 소수점 (Floating Point) 2023.11.14 댓글 0 + 이전 댓글 더보기