2011-08-16 3 views
2

왜 OSX 10.5의 GCC는 기본적으로 -fPIC 옵션이 켜져 있습니까? Afterall, 더 크고 느린 코드를 생성하지 않습니까?OSX의 GCC에서 PIC

답변

4

프로그램에 전역 변수 또는 정적 변수 또는 목표 -c를 사용하는 아주 작은 함수가 많이있는 경우가 아니면 성능 저하 또는 크기 차이가 눈에 띄지 않습니다. PIC는 스택을 사용하여 이미 액세스했기 때문에 자동 로컬 변수에 사용되지 않습니다. 이를 필요로하는 함수에서, 설정은 함수의 코드와 비교되지 않는 4 개의 명령어 만 필요로합니다. PIC를 사용하는 각 액세스는 액세스가없는 액세스보다 1 바이트 길기 때문에 많은 차이가 없습니다.

64 비트 용으로 빌드하는 경우 PIC가 더 작아서 성능 차이가 없을 수 있습니다. x86-64 아키텍처는 PIC에 필요한 설정이 없음을 의미하는 새로운 명령 기준 어드레싱을 추가했습니다. 이 새로운 어드레싱 모드는 실제로 SIB 바이트가 사용되지 않기 때문에 명령의 절대 주소를 인코딩하는 것보다 1 바이트 짧습니다.

마지막으로 PIC를 사용하면 코드의 보안이 강화됩니다. 매번 동일한 위치에 코드를로드해야하는 경우 중요한 기능 및 데이터의 위치를 ​​찾을 수있어 런타임에 문제가 발생할 수 있습니다. 그러나 운영 체제가 다른 주소에서 코드를로드하도록 선택할 수있는 경우 문제를 일으키는 모든 사람은 프로그램을 실행할 때마다 함수 및 데이터 구조가 어디에 있는지 찾아야합니다.