Linux `size` 명령은 `ls`와 다른 결과를 제공합니다.

Linux `size` 명령은 `ls`와 다른 결과를 제공합니다.

Ubuntu 16.04에 빌드된 실행 파일이 있습니다. GUI 및 ls -l 명령을 통해 표시되는 파일 크기는 다음과 같습니다.

-rwxrwxr-x 1 alibivmuser alibivmuser 19108760 dic 20 15:49 NreSpeechApplication

이는 파일의 실제 크기가 19MB라는 것을 의미합니다. 내 파일 시스템에서 크기는 다소 비슷합니다(ls -s 사용).

18664 NreSpeechApplication

Linux에서 이 명령의 크기 출력이 size비슷한 결과를 제공할 것으로 예상했지만 총 크기는 약 1.8MB로 표시됩니다.

text    data     bss     dec     hex filename
1806360    2416    4552 1813328  1bab50 NreSpeechApplication

그래서 내 질문은: 두 결과가 왜 그렇게 다른가요? 1.8MB에서 18MB까지 이 추가 MB는 어디서 나오는 걸까요?

답변1

ls실제 파일 크기, 즉 파일을 열고 읽을 때의 바이트 수를 표시합니다.

파일이 디스크에서 얼마나 많은 공간을 차지하는지 알고 싶다면 파일 시스템의 블록을 du -h고려해야 합니다.du

예: 파일 크기가 1500이고 블록 크기가 1024인 경우 du2048이 표시되어야 합니다. 파일이 블록에 "맞을" 수 없기 때문에 대신 ls1500이 표시됩니다.

size실행 파일의 런타임 이미지 크기를 표시합니다. 예를 들어 실행 파일은 약 1.8MB의 RAM/ROM을 사용합니다. 이는 파일 크기와 직접적인 관련이 없습니다.

실행 파일이 차지하는 RAM/ROM의 양(동적 메모리 할당 제외)을 알고 싶다면 크기를 통해 필요한 정보를 얻을 수 있습니다.

답변2

size실행 파일의 기존 부분을 표시합니다.

예를 들어 이러한 레거시 섹션에는 디버깅 정보가 포함되어 있지 않습니다. 디버깅 정보는 많은 공간을 차지합니다. 전체 섹션 목록을 보려면 다음을 실행하세요.objdump -h NreSpeechApplication

총 개수(10진수/16진수)가 파일 크기와 직접적인 관련이 없는 또 다른 이유는 include입니다 bss. 실행 파일이 로드되면 이 섹션이 0으로 초기화되므로 파일에 포함되지 않습니다.

파일 끝에 임의의 정크가 추가되는 것과 같이 파일이 단지 변칙일 수도 있습니다 :).

관련 정보