• 카테고리

    질문 & 답변
  • 세부 분야

    프로그래밍 언어

  • 해결 여부

    미해결

변수의 메모리 주소- 실행할 때마다 새로운 메모리 주소에 변수가 할당되어지는데 그 이유가 뭔가요??

22.08.07 13:29 작성 조회수 156

0

#include <iostream>

using namespace std;

int main()
{
    int x = 1;//Initialization
    
    x = x + 2;

    cout << &x << endl;

    return 0;
}

 

예를 들어서, 이러한 코드를 빌드 후 실행시켰을 때 00CFF960 이란 메모리 주소값이 출력됩니다! 그리고 다시 한 번 실행 시키게 되면 001DF724이라는 첫번째 주소와는 다른 주소값에 메모리 공간을 할당 받은 것으로 나옵니다! 왜 그런건가요!

답변 1

답변을 작성해보세요.

1

강민철님의 프로필

강민철

2022.08.08

간단한 개념만을 설명드리자면..

 

실행되는 프로그램을 프로세스라고 합니다.

프로세스는 실행되기 위해 메모리에 적재되어 있어야 하며,

더 이상 실행되지 않고 정료된 프로세스는 메모리에서 삭제됩니다.

만일 질문자님께서 작성해주신 예제 코드를 컴파일하여 실행하면

그 프로세스는 메모리에 적재되고,

return 0;를 만나 실행이 끝난 순간 메모리에서 삭제됩니다.

 

이 때, Windows, macOS와 같은 운영체제는 

새로운 프로세스를 실행할 때 같은 주소에만 적재하지 않습니다.

메모리 내에 적당히 비어 있는 공간을 탐색하고

가장 적당한 공간에 적재하지요.

(왜냐하면 질문자님 컴퓨터에는 작성하신 코드 이외에도 여러 프로세스들이 동시에 실행되고 있어

메모리 내에 적재되어 있기 때문입니다.)

 

프로세스가 실행할 때마다 다른 메모리 공간에 적재될 수 있기 때문에

변수의 주소 또한 달라질 수 있는 것입니다.