빈클래스에 sizeof 했을때..

맹고이의 이미지

#include <iostream>
using namespace std;

class foobar { };

int main() {
    foobar foo;
    cout << sizeof foo << endl;
}

하면 크기가 "1" 이 나오는데.. 여기엔 무엇이 들어있어서 1인가요..?

class foobar { int x; } ;
라고 했다면 4가 나오는데 여기는 왜 4만 나오는건가요..
음.. int 가 4byte라서 그렇겠지만;;

sunyzero의 이미지

실제로 디버거에서 사용하는 디버깅 정보를 뽑아서 봤더니

class foo { /* size 1 id 24 */
public:
class foo /* id 24 */ &class foo /* id 24 */::__as (class foo /* id 24 */ const &) /* __as__3fooRC3foo */;
class foo /* id 24 */ *class foo /* id 24 */::foo (class foo /* id 24 */ const &) /* __3fooRC3foo */;
class foo /* id 24 */ *class foo /* id 24 */::foo () /* __3foo */;
};
typedef class foo /* id 24 */ foo;

요런식으로 나오는군요. 진짜로 size가 1이군요. 기본적으로 아무데이터형도 갖지 않을때는 기본으로 1 octet을 가지는게 기본인가봅니다.

========================================
* The truth will set you free.

Fe.head의 이미지

최소한 메모리에 어떤곳에 위치한것인가를 알고 있어야 주소도 알수 있는거고

변수로 쓸수 있지 않겠습니까?

이거 수업시간에 배운거 같은데... 위의 말이 답변이고요..

고작 블로킹 하나, 고작 25점 중에 1점, 고작 부활동
"만약 그 순간이 온다면 그때가 네가 배구에 빠지는 순간이야"

맹고이의 이미지

fehead wrote:
최소한 메모리에 어떤곳에 위치한것인가를 알고 있어야 주소도 알수 있는거고

변수로 쓸수 있지 않겠습니까?

이거 수업시간에 배운거 같은데... 위의 말이 답변이고요..

그생각도 있어서 질문을 드린겁니다..

class foobar { int x; }; 는 4byte인데..
요건 메모리상에 어디에 있다던지
하는 정보가 왜 따로 없는걸까요..
그럼 5byte가 되어야되지않을까하는
제 맘대로의 생각입니다;;
(1byte라는게 님께서 말씀하신 메모리주소등의 정보라고 생각할때..)

제가 머가 어떻게 컴파일되서 스택에 쌓인다던지 하는것에
개념이 없습니다.. 무슨 테이블에 적고 그런다던데-_-a

charsyam의 이미지

보통 char id[0]; 같은 경우에도 1 바이트가 할당됩니다. 위의

class foo{ }; 도 마찬가지 일듯합니다. 그냥 0 바이트를 할당하기에는

이것을 쓸 가능성이 있기 때문에 1바이트 정도가 할당될듯 합니다.
(그냥 추측이고, 컴파일러가 0바이트면 1바이트를 할당하더군요.)

보통 우리가 int a 라고 선언하는 것은 이 a 라는 이름이 메모리 주소를

가리키고 있는 겁니다. 그런데 foo vfoo; 식으로 선언하면 메모리가 없으므로

0을 가리킬 수 는 없어서 1정도를 할당하는게 아닐까요? 그럼 고운 하루

되시길... 그런데, 솔직히 0바이트 할당해서 쓰는 일이 없다는 ^^

=========================
CharSyam ^^ --- 고운 하루
=========================

댓글 달기

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