궁금증;

#include <iostream>
using namespace std;

int fv()
{
int x = 1;
cout << "address of x in fv() : " << &x << endl;

return x;
}

int* fp()
{
int x = 1;
cout << "address of x in fp() : " << &x << endl;

return &x;
}

int& fr()
{
int x = 1;
cout << "address of x in fr() : " << &x << endl;

return x;
}

int main()
{
int v = fv();
cout << "v = fv() : " << v << endl;
int* p = fp();
cout << "*p = fp() : " << *p << endl;
int r = fr();
cout << "r = fr() : " << r << endl;
}



컴파일해서 실행시켜보면,
address of x in fv() : 0xbfaef554
v = fv() : 1
address of x in fp() : 0xbfaef554
*p = fp() : 1
address of x in fr() : 0xbfaef554
r = fr() : 1



local 변수인 x의 address값이 동일하게 나온 이유는?
  • kkung at 2005.12.24 20:22

    성스런 크리스마스 이브거늘
    컴퓨터랑 씨름하고 있다니 :)

    일단 해당하는 문제는, machine 혹은 compiler 에 relate한 문제가 될텐데 각설하고 일반저긴 이야기를 하자면.

    일반적으로 로컬 변수가 그 스코프를 벗어나게 되면 값이 사라진다는것은(=의미를 잃어버린다는것)은 로컬 스코프들이 자신이 CPU타임을 소유했을때 사용하는 공간이 같기 &#46468;문인데(Stack).... 어지럽지?-_-;

    간단히 말하자면, 실제로 같은 영역(=공간)을 쓰기 때문에 같다
    라고 밖에 말해줄수가 없겠네. 메모리 아키텍쳐를 이해하려면 필수적으로 컴파일러와 링커를 이해해야 하고 그러자면 필수적으로 O/S 와 어셈블리 지식이 붙어야 하고... 갈길이 멀지?

    실지로 곰곰히 생각해 보면 저러한것이 합리적이란것도 생각해 볼수 있게 되는데, 만약 계속 사용하는 공간이 달라진다면, 저러한 함수를 정말 엄청 호출해 댄다면, 쓸수 있는 공간이 동나 버리겠지. 그래서 실제로, resursive-function 같은경운 지나친 호출의 경우엔 문제가 되기도해. 스택이 동나버리거든.

    이래저래 더 헷갈리게 만들어 버린것 같지만-_-; 지금은 그냥 그래서 그런가보다 할수 밖에 없단 소리. 그래도 정 궁금하면 PE Format Document 나, ELF Format Document 와 링커 그리고 어셈블리, Memory Architecture(..스펠링 맞나--) 관련 문서를 보면 좀 도움이 될꺼야~

    ...아하하 이브에 뭐하는 짓이람. 배고프다orz

    • sy at 2005.12.25 03:24

      밑에서 글로 쓰기는 했지만, 그렇고 그런 책을 요즘 보고 있는데, 이런 내용이 나왔거든 -_-a

      뭐, 줄여서 얘기하자면, 각 fuction의 로컬변수들이 잡히는 Stack Frame들이 운이 좋게[?] 같은 메모리에 잡혔다가 풀렸다가 한다는 말로 이해하고 있삼;

      지금 궁금한건, 각 function에서 return을 해주고 나면, compiler가 알아서 이미 잡혀있던 stack 부분을 free해줄텐데, 그럼 정확한 값이 나올 수 없는거 아니야?

      뭐, 본문에 제대로 써놓지는 않았지만, 가장 궁금했던 부분은 그거였어. 어떻게 compiler에서 알아서 free해줬을 부분을 잡아서 값을 넘겨줬는지.

    • sy at 2005.12.25 03:25

      크리스마스 이브날, 너도 나도 조금 암울하게 씨름하고 있었네 -_-;
      요 며칠 계속 정신 놓고 있었더니, 네 생각을 못하고 있었다.
      기나긴 답글 달아가면서 설명해줘서 땡큐.
      그리고, 늦었지만 생일 축하한다!

댓글 남기기
◀ PREV 1···565758596061626364···71 NEXT ▶