포인터변수의 타입정보는 어디에 저장이 되나요?

impactlife의 이미지

안녕하세요.
처음으로 질문올려보네요.

포인터변수는 메모리주소 + 타입정보를 가지고 있다고 배웠는데요.
포인터변수 자체가 4byte이면 메모리주소는 저장한다고 하지만 타입정보는 어디에 저장이 되는걸까요?

그리고 배열의 이름이나 일반 변수등의 이름도 따로 어딘가에 저장되어야 할것 같은데
책에는 그냥 메모리의 레이블로 붙는식으로만 설명되어 있는데 이부분은 또 어디에 저장되고 어떻게 매핑되는건가요?

익명 사용자의 이미지

소스코드에 저장됩니다.

impactlife의 이미지

그렇군요. 아항~
감사합니다. 궁금증이 풀렸어요

taesaza0의 이미지

틀릴 수도 있지만 제가 아는 선에서 답변해드리면

실제로 포인터 변수가 가지고 있어야 하는 정보는 4byte(32bit machine 인 경우) address 입니다.
해당 address를 가지고 double 형이라면 8바이트를, short라면 2바이트를 읽어서 값을 사용하게 되겠죠

그럼 해당 address를 reference하여 8바이트를 읽을지 2바이트를 읽을지는 어떻게 결정 할까요??
이게 질문의 요지 맞으신가요??

이는 컴파일 타임에 해결되게 됩니다. 소스코드를 컴파일 할 때는 해당 변수의 타입을 알 수 있습니다(포인터의 선언 또는 캐스팅 등을 살펴 봄으로써 알고 있겠죠? 물론 이보단 더 복잡하게 해결됩니다만)
컴파일 타임에 해당 변수의 타입을 가지고 몇 바이트를 읽을지 binary code를 생성해 내게 됩니다. 즉 binary code에는 이미 몇 바이트를 읽을지 명시가 되기 때문에 타입이 없어도 됩니다.

배열의 이름이나 변수의 이름등은 심볼 테이블이라는 것에 저장이 되게 됩니다. 컴파일 타임에서 위와 같은 작업을 하는데 심볼 테이블이 사용되고, 실제 컴파일 된 binary에 심볼 테이블이 포함 되기도 합니다(이부분은 정확히 잘 기억이 안나네요)

impactlife의 이미지

너무나 자세하게 설명해 주셔서 정말 감사합니다.

qkrwncks593의 이미지

실제로 배열이름이나 변수이름은 저장되지않습니다. 책에 그렇게 나온이유는 쉽게 가르킬려고 한것뿐입니다.

지금 님이 배우고있는언어는 고급언어입니다. 고급언어는 로우레벨부분을 모두 추상화시켜서 내부적인 호출규약이나 그런건 보이지않습니다.

원래 변수에 데이터를 저장할때는 다음과같이 이루어집니다.

mov [ebp-4], 10 // ex

impactlife의 이미지

컴파일타임때 저런명령을 내릴수 있도록 제가 짠 소스가 변환된다는 말씀이시죠? 음...

댓글 달기

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