2017-12-12 42 views
0

오른쪽 컴파일러 그러나 C 프로그래밍 언어, 브라이언 W 커니 핸 & 데니스 M. 리치컴파일러 및 지침은

을 "C는 특정 시스템에 연결되지 않은 genereal 목적 언어입니다"설정 우리 모든 Windows 컴퓨터에서 실행되는 .exe를 만들 수 있으며 이는 차례대로 모든 CPU가 실행될 때마다 실행됩니다.

제 질문은 : 모든 x86-64 CPU (Intel 또는 AMD)가 동일한 명령어 세트를 사용합니까? (네, 비교를 할 수 있습니다 ...) 그렇지 않다면 컴파일러가 우리가 실행중인 CPU를 감지하고 컴파일시 올바른 명령어 세트를 사용한다고 가정해야합니다.

전 완전히 착각합니까?

내가 무슨 말을하는지 거의 알지 못하므로 나와 함께 참아주십시오. 후드 아래를 보려고하는 단지 젠체하는 사람.

+1

매우 거친 말 : 예, 모든 x86-64 CPU (Intel 또는 AMD)는 동일한 명령어 세트를 사용합니다. –

+4

Windows가 ARM에서도 실행된다는 것을 감안할 때 올바른 컴파일러를 사용하면 모든 Windows 컴퓨터에서 실행되는 .exe를 만들 수 있으므로 모든 CPU가 실행되는 것을 의미합니다. 동일한 원시 실행 파일은 Windows/ARM 및 Windows/x86-64에서 실행할 수 없습니다. – sepp2k

+0

"32 및 64 비트 CPU"를 써야합니다. –

답변

5

인텔이 "- 64"가족 (과 그렇지 않은 추가 프로세서 모델)의 핵심 명령어 세트를 공유하는 여러 프로세서 모델을 만들어 주셔서 감사합니다. 공유 코어 명령어를 사용하는 프로세서 사이에도 유사점이 있습니다. 최신 모델에는 구형 모델에서 제공하지 않은 지침이있을 수 있으며 지침 집합의 일부는 특정 모델에만 적용되고 다른 버전에는 적용되지 않을 수 있습니다.

일부 지침은 다른 프로세서에서 다르게 동작합니다.

프로그램을 컴파일 할 때 컴파일러는 특정 명령 집합 조합을 "대상 지정"합니다. 즉, 컴파일러가 코드를 생성 할 때 사용할 수있는 하위 집합의 명령어가 있음을 의미합니다. 컴파일러는 특정 프로그램을 컴파일 할 때 요구 사항이나 선택 사항에 따라 특정 명령이나 하위 집합을 사용하거나 사용하지 않을 수 있습니다. 그 결과 생성 된 프로그램은 타깃 화 된 명령어를 가진 프로세서 모델에 적합하고 다른 모델에는 적합하지 않습니다 (컴파일러가 그러한 모델에없는 명령어를 사용하지 않은 경우는 제외).

종종 컴파일러 대상의 기본 설정은 실행중인 것과 같은 프로세서 모델이거나 최신 프로세서 모델에 일반적으로 사용되는 일부 명령 하위 집합입니다. 대상은 운영 체제의 특정 버전을 대상으로하도록 요청하는 것과 같이 컴파일러에 제공하는 다른 설정을 기반으로 선택할 수도 있습니다. 그러나 컴파일러 스위치를 전달하여 인텔 프로세서에서 실행되는 동안 ARM 프로세서 용 컴파일과 같이 전혀 다른 아키텍처에서도 완전히 다른 대상을 컴파일하도록 지시 할 수 있습니다.

소프트웨어는 컴퓨터 시스템의 일부이기도하므로 컴파일러가 생성하는 실행 파일은 런타임 또는 특정 운영 체제 기능을 사용할 수있는 특정 소프트웨어 라이브러리에 따라 달라질 수 있습니다.