C와 C++컴파일시 실행파일 크기가 많이 다르네요..

버그소년의 이미지

기존에 C로 되어있던 코드를 C++로 변경작업중입니다.

부분적으로 클래스로 묶어가며 작업중입니다.

소스량도 C++로 변경한것이 조금 더 적어젔더군요.

C코드의 함수들 몇몇을 클래스화 하며 반복되는 부분을 많이 줄였습니다.

그런데 실행파일의 크기는 C로 컴파일한것은 60K정도 되는데

C++로 컴파일한 것은 옵티마이즈 옵션을 줘도 350k가 넘어가네요.

각각 링크되는 오브젝트파일들의 크기를 합해보면,

C : 73223bytes, C++ : 42556bytes

이렇게 C++오브젝트 크기다 훨신 작습니다.

뭐.. 파일크기야 별 상관이 없지만 실행파일의 크기가 커지니까 성능

(속도)면에서 더 느려질것 같다는 걱정이 됩니다.

이렇게 실행파일의 크기가 커졌을때 어느정도의 속도저하가 있는지,

무시할 수 있는 정도인지... 아무튼..

고수님들의 노우하우나 경험담.. 기다리겠습니다.

cinsk의 이미지

어려운 문제이군요.

일단 단도직입적으로 말하자면 파일 크기와 실행 속도와는 그리 직접적인 관계는 없습니다. 궂이 있다면 실행 파일을 디스크에서 로딩하는 속도랄까요?

문제는 그 실행파일이 실제 어떠한 코드로 이루어졌냐는 것입니다.

대개 high level 언어로 작성한 것은 overhead가 크겠죠. 그 overhead가 무섭다면 어셈블러로 완벽하게 짜면 되겠지만, 개발 시간이나 디버깅 시간이 만만치 않으므로, 일종의 tradeoff라 할 수 있겠죠.

C++로 짜면서 (시간) overhead를 줄이려면 글쎄요? 일단 virtual 함수는 최대한 줄이고, 가능하면 inline 함수를 쓰면 될 것 같습니다.

파일 크기는 크게 신경쓰지 않으셔도 될 것 같습니다. 문제는 어떠한 라이브러리를 쓰느냐, 어떤 코드(알고리즘)를 쓰느냐겠죠.

물론 제가 쓴 글은 속도로 최적화한다고 봤을 때 입니다.

파일 크기나 메모리 사용량을 최적화한다면 문제는 달라지겠지만요. :wink:

빠르기로 최적화한다면 파일 크기가 늘어나는 경우가 흔합니다. Inline기능이나, memory alignment등으로 말이죠.

여담으로, 제가 올린 글 중에서 이 글은 가장 아리송한? 답변이 될 것 같군요. 조금이나마 도움이 되었기를 바랍니다.

지리즈의 이미지

위에 분께서 파일 크기와 실행 속도와는 그리 직접적인 관계가 없다고
말씀하셨는데,
일반적으로 빠른 소스코드가 용량이 큰 경우가 많습니다.

스택을 쓰지 않고, 인라인 함수가 늘어나면 당연히 바이너리크기가
커져야 겠지요...
물론 개발하는 언어가 달라져서 용량이 느는 것은 여러 원인이 되겠지만요.

There is no spoon. Neo from the Matrix 1999.

댓글 달기

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
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.