Notice
Recent Posts
Recent Comments
Link
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

보근은 참고 있다

2.17 오류 및 함정 본문

CS/컴퓨터 구조

2.17 오류 및 함정

보근 2020. 10. 14. 22:24

 

 

 

 

오류: 강력한 명령어를 사용하면 성능이 좋아진다.

 

 intel x86 명령어는 접두사를 이용해 명령어 실행 방식을 변경할 수 있기 때문에 매우 강력하다. 그중 한 접두사는 카운터 값이 0이 될 때까지 명령어 반복 실행이 가능하게 해준다. 그러나, 순환문 오버헤드가 없도록 명령어를 반복적으로 늘어놓는 방법을 쓰면 접두사를 쓴 것보다 약 1.5배 빠르다.

 

 

 

 

오류: 최고 성능을 얻기 위해 어셈블리 언어로 프로그램 작성하기.

 

 과거에는 컴파일러가 출력하는 코드의 성능이 좋지 못했으나, 현재는 컴파일러 기술이 발달하면서 컴파일한 코드와 직접 손으로 작성한 코드의 차이가 급격히 줄어들었다. 상위 수준 언어로 프로그램을 작성해 컴파일하는 이유는 다음과 같다.

 

  • 컴파일러 기술이 발달된 지금, 어셈블리 프로그래머가 컴파일러의 코드를 이기기 위해선 프로세서 파이프라이닝과 메모리 계층의 개념을 완전히 이해하는 등 전문 지식이 필요하다.
  • 예전에는 컴파일러의 레지스터 할당 기술이 미숙하여 C언어에는 어떤 레지스터에 할당하면 좋을지 프로그래머가 컴파일러에게 알려주는 방법도 있었다. 하지만 현재는 프로그래머보다 컴파일러가 훨씬 레지스터 할당에 능숙하다.
  • 설사 손으로 빠른 코드를 작성했다고 해도, 어셈블리 프로그램은 코딩과 디버깅에 많은 시간이 걸리고, 이식성이 없으며, 유지보수가 어렵다.

 

 

 

오류: 상업적 프로그램의 이진 호환성이 중요하다는 것은 성공적인 명령어 집합은 변하지 않는다는 것을 의미한다.

 

 후방 이진 호환성은 신성불가침이지만, 아래의 표를 보면 x86 구조가 매우 극적으로 성장해 왔음을 알 수 있다.

(이진 호환성 : 프로그램을 리컴파일 하지 않아도 되는 것)

 

 

 

 

 

함정: 바이트 주소를 사용하는 컴퓨터에서 인접 워드 간의 주소 차이가 1이 아니라는 사실.

 

 실제로 MIPS에서는 바이트 주소를 이용하기 때문에 워드 간의 주소가 4씩 차이가 난다.

 

 

 

 

 

함정: 자동 변수가 정의된 프로시저 외부에서 자동 변수에 대한 포인터를 사용하는 것.

 

 예를 들어, 프로시저 내부에서 사용된 어떤 메모리 영역 A를 프로시저가 종료된 후에도 A라고 착각하고 포인터로 참조한다면 그 영역은 A 일수도 있지만 아닐 수도 있다. 예기치 못한 일이 발생할 수도 있기 때문에 조심해야 한다.

 

 

 

 

 

 

Comments