왜 OSX 10.5의 GCC는 기본적으로 -fPIC 옵션이 켜져 있습니까? Afterall, 더 크고 느린 코드를 생성하지 않습니까?OSX의 GCC에서 PIC
2
A
답변
4
프로그램에 전역 변수 또는 정적 변수 또는 목표 -c를 사용하는 아주 작은 함수가 많이있는 경우가 아니면 성능 저하 또는 크기 차이가 눈에 띄지 않습니다. PIC는 스택을 사용하여 이미 액세스했기 때문에 자동 로컬 변수에 사용되지 않습니다. 이를 필요로하는 함수에서, 설정은 함수의 코드와 비교되지 않는 4 개의 명령어 만 필요로합니다. PIC를 사용하는 각 액세스는 액세스가없는 액세스보다 1 바이트 길기 때문에 많은 차이가 없습니다.
64 비트 용으로 빌드하는 경우 PIC가 더 작아서 성능 차이가 없을 수 있습니다. x86-64 아키텍처는 PIC에 필요한 설정이 없음을 의미하는 새로운 명령 기준 어드레싱을 추가했습니다. 이 새로운 어드레싱 모드는 실제로 SIB 바이트가 사용되지 않기 때문에 명령의 절대 주소를 인코딩하는 것보다 1 바이트 짧습니다.
마지막으로 PIC를 사용하면 코드의 보안이 강화됩니다. 매번 동일한 위치에 코드를로드해야하는 경우 중요한 기능 및 데이터의 위치를 찾을 수있어 런타임에 문제가 발생할 수 있습니다. 그러나 운영 체제가 다른 주소에서 코드를로드하도록 선택할 수있는 경우 문제를 일으키는 모든 사람은 프로그램을 실행할 때마다 함수 및 데이터 구조가 어디에 있는지 찾아야합니다.
관련 문제
- 1. 크로스 컴파일시 PIC/non-PIC 코드 오류
- 2. PIC 질문 .. ~
- 3. OSX의 XAMPP 기본 폴더
- 4. OSX의 JNI 문제
- 5. Mac OSX의 Pythonpath
- 6. iPhone OS에서 OSX의 코코아로
- 7. OSX의 KeyDown 액션?
- 8. 리눅스/OSX의 C# GUI
- 9. 번호 저장 PIC ASM
- 10. PIC (Position Independent Code)
- 11. PIC 어셈블리 함수 호출
- 12. PIC 디스어셈블러 필요
- 13. AVR 또는 PIC? MATLAB
- 14. PIC 레지스터 (% ebx)의 기능은 무엇입니까?
- 15. GCC에서 wchar_t의 크기는 얼마나됩니까?
- 16. GCC에서 템플릿 기능
- 17. GCC에서 경고 발생
- 18. GCC에서 OpenSSL을 사용하는 방법?
- 19. _THROW는 GCC에서 정의되지 않았습니까?
- 20. gcc에서 함수 수준 연결
- 21. GCC에서 LLVM으로의 마이그레이션 팁?
- 22. Mac OSX의 OpenGL 업데이트 유니폼
- 23. Mac OSX의 Conkeror 키 바인딩
- 24. OSX의 udev 기능에 대한 대안
- 25. OSX의 PackageMaker에서 Python 스크립트를 실행하십시오.
- 26. Mac OSX의 네트워크 패킷 검사기
- 27. 새내기 질문 : OSX의 GTK # (모노)
- 28. Mac OSX의 Bitrock 설치 관리자
- 29. 웹에서 PIC 마이크로에 데이터 다운로드
- 30. 우분투 11.04에서 PIC 마이크로 어셈블러