C 와 C++ 소스 컴파일 시간이 차이 나는 이유는 뭐죠?

atclock의 이미지

심심 풀이로, 혹은 제 시스템에 설치 할 목적으로 가끔 rpm 패키징을 하고 있습니다. 그런데 대체적으로 C 보다는 C++ 소스를 컴파일 하는 시간이 적게는 2-3배에서 많게는 3-4배 정도 시간이 많이 걸리는 이유는 뭘까요? 프로그래밍하고는 관계가 먼 단순 데스트탑 유저입니다.

익명 사용자의 이미지

gcc 개발자에게 물어보시길.

(예제 물음)

어떤 루틴을 타요?

아에 다르게 만들어 졌나요?

C++ 구문 분석하는게 좀더 어려운가요?

아마 3번째 물어보심 될듯...

익명 사용자의 이미지

음냐뤼 wrote:
gcc 개발자에게 물어보시길.

좀 머쓱한 답이네요...^^

볼드 패치가 뭐죠...? 답... 아키토씨에게 물어보시길...

익명 사용자의 이미지

간단하게 overhead가 많아서가 아닐까요?
C는 어셈블리 즉 기계어와 거의 1:1 매치 되므로 소스를 순서대로 죽 훝어주면 되는 반면 C++은 class개념도 들어가고 연산자 redirection 등등을 처리해야 하므로 .. 실행속도도 느려지고..

익명 사용자의 이미지

iostream과 기타 골때리는 상속관계의 표준 라이브러리들 때문이 아닐까 저는 의심하고 있습니다.

익명 사용자의 이미지

atclock wrote:
심심 풀이로, 혹은 제 시스템에 설치 할 목적으로 가끔 rpm 패키징을 하고 있습니다. 그런데 대체적으로 C 보다는 C++ 소스를 컴파일 하는 시간이 적게는 2-3배에서 많게는 3-4배 정도 시간이 많이 걸리는 이유는 뭘까요? 프로그래밍하고는 관계가 먼 단순 데스트탑 유저입니다.

초기에는 C++컴파일할 때 c언어로 파싱하고 컴파일 했다고 합니다.
그리고 원래 c언어거 어셈블리 다음으로 컴파일이 빠르다고 합니다. 그 이유는 대부분의 cpu가 객체지향적으로 설계가 안되어 있아서 ㄱ렇닷고 합니다.
creativeidler의 이미지

하이레벨 언어일수록 문법이 인간에 가깝고 로우레벨 언어일수록 문법이 기계에 가깝습니다. 대충 줄 세워 보면

machine code - assembly - C - C++

이런 식이죠

그러니까 컴파일 속도도 C보다 C++이 느립니다. 좀더 인간적(?)이기 위해 machine code와 거리가 멀게 언어가 설계되었기 때문입니다.

죠커의 이미지

GCC는 느린 C++ 컴파일러입니다. 특히나 (GCC의) 템플릿은 EDG 구현으로 인해서 O(N^2)의 효율을 보입니다.

corba의 이미지

C++의 문법은 C에 비해 많이 복잡한 편입니다.

거기다 CN님의 말씀 대로 템플릿 까지 들어가 버리면 더 오래 걸리겠지요.

그리고 최적화 방식도 C에 비해서 많이 복잡하다고 들었습니다.

또, 똑같은 코드를 C와 C++컴파일러에서 돌려도 역시 C++이 더 느리지 않을까요 ?

p.s : C언어 보단 Pascal이 컴파일 속도는 훨씬 빠르다고 알고 있습니다.

익명 사용자의 이미지

최적화나 뭐 그런 문제들도 많겠지만
일단 C 언어 자체가 그렇게 파싱하기 좋은 형태는 아닙니다.
Pascal 쪽이 파싱하기는 훨씬 좋죠.

C++는 좀 .. -_-;
( gcc 팀에서 손으로 만든 파서 쓸거라고 했을때 경악을했죠 .. ;; )

avelose의 이미지

Anonymous wrote:
최적화나 뭐 그런 문제들도 많겠지만
일단 C 언어 자체가 그렇게 파싱하기 좋은 형태는 아닙니다.
Pascal 쪽이 파싱하기는 훨씬 좋죠.

C++는 좀 .. -_-;
( gcc 팀에서 손으로 만든 파서 쓸거라고 했을때 경악을했죠 .. ;; )

윈도우 상에서 델파이의 컴파일 속도와 비주얼 C의 컴파일 속도는 천지 차이죠. 압도적으로 델파이의 속도가 빠르죠. 델파이의 경우 폼 5개 정도에 bde(ado)및 기타 등등 컴포넌트 올리고 돌려도 비주얼 C++의 'hello, world!'보다 빠르다고 자신있게 말할 수 있습니다.

압도적인 속도 차이죠.(문제는 컴파일 속도만 빨랐지 자원의 활용에 대해서는 역시 C++ 혹은 C) 컴포넌트가 미리 컴파일되어 있는 델파이는.. 실행화일 용량이... [뭐 이건 bpl로 용량 줄이기가 충분히 가능하긴 하지만]

'현실은 수학으로 표현할 수 없다.'
'수학은 거짓의 학문이다.'
'난 수학이 정말 싫다.'

댓글 달기

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