질문 : 템플릿과 클래스 상속에 관한 질문입니다.

익명 사용자의 이미지

안녕하세요?

템플릿과 클래스 상속에 관해 궁금한것이 있어서 질문을 올립니다.

일반 클래스에서 상속받은 템플릿 클래스의 실제 크기에 관해서인데요,

class a { 샤랄라 };

template class aa public a { 울랄라 };

와 같은 문장이 있다 가정할때,

만약 aa 와 aa의 인스턴스가 생성되고, 컴파일된다면,

오브젝트파일은

( template class aa에서만 구현된 크기 더하기 a의 크기 ) 곱
하기 2

크기만큼의 내용을 포함하나요?

아니면 템플릿 클래스에서 a의 내용들은 공유를 하고,

변화된 내용만큼만 덧붙게 되어,

( template class aa에서만 구현된 크기 크기 곱하기 2 ) 더하
기 a의 크기

크기만큼의 내용을 포함하게 되나요?

템플릿 클래스를 만드는데 오브젝트가 수십만바이트씩 늘어나길래,

나름대로 이렇게 하면 크기는 줄어들지 않을까 싶어서 궁리를 했습니다.

답변주시면 고맙겠습니다.

익명 사용자의 이미지

템플릿의 문제점 중 하나가, 코드 비대화(code bloat) 문제입니다.

각각의 인스턴스를 생성할 때마다, 그 만큼의 코드를 위한 메모리가 중복
되어 할당됩니다.

템플릿으로 인한 속도 향상이라는 장점에 수반하는, 어쩔 수 없이 수반되
는 단점이지요. -_-;;

이런 문제를 해결하려면, 객체 자체의 템플릿 보다는 포인터의 템플릿을
사용하는 코드를 만드는 방법도 있습니다만, 좋은 방법은 아니죠.

또한 ANSI C++ STL(Standard Template Library)에서도
함수 객체 대신 함수 포인터를 사용하게 하는 방법도 있습니다.

물론, 이러한 방법들은 코드 크기가 줄어드는 대신 속도는 느려집니다.
경우에 따라서 알맞은 방법을 선택하시기 바랍니다.

익명 사용자의 이미지

감사합니다.
정말 속시원한 대답이군요.
여기저기 물어봐도 어정쩡 내지는 질문의 요지를 모르겠다는둥,
어쨋든 감사드립니다.

댓글 달기

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