가능한 중복 : 그냥 호기심
Why are compiled Java class files smaller than C compiled files?C/C++ "Hello World"가 킬로바이트 단위 인 이유는 무엇입니까?
난 그냥 C, C++ 및 Java에서 "안녕 세계"를 컴파일.
자바 클래스 파일은 런타임이 바이너리에 포함되어 있지 않기 때문에 이해할 수있는 423B에서 매우 가늘다.
C 및 C++ 코드는 8.5K 및 9.2K입니다.
왜 그렇게 큰 편입니까? 나는 항상 stdio 나 iostream이 동적으로 링크되어 있고 실행 파일의 크기에 추가하지 않는다고 가정했다.
그래서 모든 킬로바이트는 어디에서 왔습니까? 헥스 덤프를 보면 퍼팅이 많이 발생한다는 것을 알 수 있습니다. 퍼포먼스의 이유로 추측합니다. 바이너리 형식이 왜 그렇게 구성되어 있습니까?
pmg의 링크는 매우 유용합니다!
패딩과 관련해서는 프로그램의 세그먼트를 가상 메모리 페이지 경계 (4096 바이트)에 정렬하여 최소 8192 바이트가되는 것을 발견했습니다. 최상의 성능 (OS X와 iOS 용) 마하 O 바이너리 포맷 대하여
는 세그먼트 파워 및 x86 프로세서의 가상 메모리 페이지 경계-4096 바이트 정렬되어야한다. 세그먼트 크기를 계산하려면 각 섹션의 크기를 더한 다음 합계를 다음 가상 메모리 페이지 경계 (4096 바이트 또는 4 킬로바이트)로 올림하십시오. 이 알고리즘을 사용하면 세그먼트의 최소 크기는 4 킬로바이트이고 그 이후에는 4 킬로바이트 씩 증가합니다. http://developer.apple.com/library/mac/#documentation/DeveloperTools/Conceptual/MachORuntime/Reference/reference.html
내가 다음에 시간을 요청하기 전에 연구를 할 수 있습니다 인용
)
당신은 [리눅스 정말 얼른 ELF 실행 파일을 만들기에 회오리 바람 튜토리얼]를 읽을 것 같아서 (http://www.muppetlabs.com/~breadbox/software/tiny/teensy.html). – pmg
그것은 대부분 지금 패딩입니다. – Phantrast
@pmg - 그 링크에 감사드립니다. 그것은 매우 잘 쓰여진 놀라운 작품입니다. –