[완료]소스를 완성한후 실행파일용량 문제입니다. 실행파일 용량이 결정되는이유를 알고싶습니다.

kknd8080의 이미지

제가 프로그램을 완성한후 실행파일을 보니 용량이 3.6메가정도 나옴니다

메가단위가 넘어가서는 안되는 프로그램인데 넘어서 고민중입니다.

1.실행파일 용량을 줄일수 잇는방법

2.실행파일이 생성될때 용량이 어떻게 결정되는지

고수님들의 답변 부탁드립니다.

mirheekl의 이미지

2번은 아마 다른 고수님들께서 설명 잘해주실것 같고요.
1번은 실행형 압축프로그램으로 어느정도 커버할수 있습니다.

윈도용으로는..
ASPACK이라는게 흔히 자주 쓰이고요 (물론 실행형 압축프로그램 종류는 무궁무진합니다 그중에 그나마 흔한 것)
오픈소스로는 UPX라는게 유명합니다. (이게 리눅스도 지원하는지는 모르겠습니다.)
실행 모듈들을 넣고 압축하듯 패킹하는 방식입니다. 물론 압축후에도 당연히 파일 형식이 변하지 않습니다.

다만 이미 압축된 데이터를 담고있거나
내부적으로 구성된 모듈들중에 리소스 데이터가 거의 없고 대부분 실행코드 뿐이라면 거의 압축이 안될수도 있습니다.

--
This is for you new people. I have just one rule :
Everyone fights, no one quits. If you don't do your job, I'll shoot you myself. Do you get me?

--

feanor의 이미지

UPX 리눅스도 지원합니다.

chadr의 이미지

링크 과정에서 crt 라이브러리가 static으로 링크되고 있는지 확인해보세요. 그렇다면 dynamic으로 링크하도록 해주시고 디버그 정보가 포함이 되어있는지 확인해보세요. 만약에 컴파일러 옵션과 링커 옵션에 디버그 정보가 포함되도록 되어 있으면 빼주세요.

실행파일 용량에는 크게 이렇게 구분됩니다.

1. 데이터(소스에 코딩된 스트링, 상수, 리소스 등)
2. 코드(실제 기계어가 담긴 코드영역)
3. 임포트 테이블(dynamic 라이브러리를 쓸 경우)
4. 익스포트 테이블(대부분 dynamic 라이브러리에서 보이며 exe에서는 잘 안씁니다.)
5. 디버그 데이터(컴파일러 또는 링커 옵션에 디버그 정보를 생성하고 포함하도록 해놨을 경우)
6. 기타..

대략 이런것들이 뭉쳐서 실행파일을 만듭니다.

여기서 없어도 되는 것들은 5번이며 없어도 실행에는 문제가 없습니다.
그리고 2번에서 라이브러리를 static으로 링크 하는 경우(특히 crt) 크기가 엄청 늘어날 수 있습니다.
가능하면 dynamic으로 링크 해주시면 되며 대신 dynamic 라이브러리이므로 실행시 해당 라이브러리가
반드시 존재해야합니다.

그리고 마지막으로 컴파일 최적화 옵션을 속도우선 보다는 크기우선 으로 해주세요.
오히려 속도우선보다 크기우선이 더 빠른 경우도 있습니다.(페이지 폴트 때문에)

-------------------------------------------------------------------------------
It's better to appear stupid and ask question than to be silent and remain stupid.

-------------------------------------------------------------------------------
It's better to appear stupid and ask question than to be silent and remain stupid.

kknd8080의 이미지

1메가 안으로 줄이려고 하는데 여러 방법을 이용해바야겟습니다

bootmeta의 이미지

그외 사용되지 않는 코드를 제거하려면 링크 참조
http://kldp.org/node/94079

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.