gcc -g vs not -g 및 스트립 vs strip vs strip, 성능 및 메모리 사용량?
바이너리 파일 크기가 문제가 되지 않는다면 성능이 중요한 환경에서 실행해야 하는 스트립 바이너리가 아니라 -g를 사용하는 단점이 있습니까?나는 디스크 공간이 많지만 바이너리는 cpu 집약적이고 메모리를 많이 사용합니다.바이너리는 한번 로드되고 몇 시간 동안 활성화됩니다.
편집:
디버깅 정보가 포함된 바이너리를 사용하고자 하는 이유는 세그먼트화 실패 시 유용한 코어 덤프를 생성하기 위해서입니다.
ELF 로더는 섹션이 아닌 세그먼트를 로드합니다. 섹션에서 세그먼트로의 매핑은 실행 파일을 작성하는 데 사용되는 링커 스크립트에 의해 결정됩니다.
기본 링커 스크립트는 디버그 섹션을 세그먼트에 매핑하지 않으므로 생략합니다.
심볼 정보는 두 가지 맛으로 제공됩니다. 정적 심볼은 대역 외로 처리되며 결코 섹션 데이터로 저장되지 않습니다. 동적 심볼 테이블은 링크러에 의해 생성되며 동적 링크러가 액세스할 수 있어야 하므로 실행 파일과 함께 로드되는 특수 세그먼트에 추가됩니다.strip
명령은 세그먼트에서 참조되지 않는 정적 기호만 제거합니다.
따라서 전체 프로세스를 통해 전체 디버그 정보를 사용할 수 있으며 RAM의 실행 가능한 이미지 크기에는 영향을 미치지 않습니다.이것은 또한 코어 덤프에 정보가 포함되지 않는다는 것을 의미하므로 여기서도 이점을 얻을 수 없습니다.
그objcopy
유틸리티에는 디버그 정보만 복사할 수 있는 특별한 옵션이 있으므로 이 정보를 포함하는 두 번째 ELF 파일을 생성하고 제거된 이진 파일을 사용할 수 있습니다. 코어 덤프를 분석할 때 두 파일을 모두 디버거에 로드할 수 있습니다.
objcopy --only-keep-debug myprogram myprogram.debug
strip myprogram
언급URL : https://stackoverflow.com/questions/5936181/gcc-g-vs-not-g-and-strip-vs-not-strip-performance-and-memory-usage
'programing' 카테고리의 다른 글
홈브루를 사용하여 mariadb를 실행하려고 했는데 다음 오류가 발생했습니다. 부트스트랩 실패: 5: 입출력 오류 (0) | 2023.09.12 |
---|---|
자동 완성에서 삭제된 분기 이름을 제거하려면 어떻게 해야 합니까? (0) | 2023.09.12 |
SQL Server 데이터베이스를 오프라인으로 전환할 때의 대기 시간이 너무 길음 (0) | 2023.09.12 |
옵션 지시문에 의해 디렉터리 인덱스가 금지됨 (0) | 2023.09.12 |
컨스트럭터 기능이 약속을 반환하도록 하는 것은 나쁜 관행입니까? (0) | 2023.09.12 |