![]() |
|
||||||||
경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지 |
|
이런... 또 질문을 올리셨군요. 여긴 자게인데...
어쟀든 해답을 얻고 싶다면 EXE 파일의 구조에 대하여 공부해보시기 바랍니다. 그러면 EXE 파일이 코드 영역과 데이터 영역으로 나뉘어 있다는 사실을 알게 될 것이고 데이터 영역에 들어 있는 데이터들이 전부 초기화가 안된다는 사실을 알게 될거예요. 추천하는 서적으로는 'Windows 시스템 실행파일의 구조와 원리-이호동님저'가 있습니다. 간단하게 테스트할 수 있는 방법으로는, void main() {} 이라는 간단한 프로그램을 컴파일 한 후에 용량을 체크하고 전역변수로 char buffer[10240]; 이라는 변수를 선언 후 컴파일하면 실행 파일의 크기가 정확히 10kb 증가한 것을 볼 수 있는데, 이것은 바로 위에 언급한 EXE 파일의 구조적 이유 때문이며 이 공간은 컴파일러에 의하여 초기화가 안되므로 무슨값이 들어갈지는 며느리도 알 수 없으므로 문제가 생기는 것 입니다. 마지막으로 질문은 질문란에 ㅡㅡ 음.. 제가 볼 때는 동일한 코드를 리빌드 all 했다는 것이 아닌지요
- 귀하의 Compiler(어느 회사꺼든간에)로 똑같은 소스에 대해 두번이상 Build를 반복해 실행파일들을 만들어 서로 비교해 보시고(파일들을 Byte단위로 완전비교해 같은 파일인지 아닌지를 알려주는 도구들은 많죠) 결과를 얘기해주십쇼. 라고 하는데요... 당연히 변수 하나라도 선언하면 사이즈가 커지는 것은 당연지사인데요 어느 OS나 당연한 이야기지요 .-;; 그런데 같은 코드를 빌드할 때마다 사이즈가 틀려진다라는 결과가 있다고 위의 첫 글을 쓰신 분이 이야기 하셨는데, 변수를 별도로 덧붙였다는 이야기는 아닌 듯 하네요 관련 글 리스트
|
Copyright © 1999-2015, borlandforum.com. All right reserved. |
임베디드 컴파일러 중에서 사이즈가 빌드할 때마다 몇 바이트씩 달라지는 경우가 있긴 했지만 위의 내용으로 볼 때는 win32용일 듯 싶어 제외해야할 것 같네요
제가 추론하는 가능성은
1. 그 컴파일러가 완전히 최적화 빌드를 하지 못하여 최적화 결과가 빌드 때마다 다르다 -;;
2. 어셈 루틴을 썼다. 컴파일러에서 일지하는 최적화가 다를 수 있다.