본문 바로가기

CS/C++

메모리 관리(1) - 포인터(pointer)

1) 서두

자,

 

C,C++를 하다보면 피할 수 없는 존재가 있다.

바로, 포인터다.

 

컴퓨터의 메모리에 접근하여 코딩을 할 수 있는건 양날의 검일것이다.

컴퓨터와 가깝다는건 좋으면서 위험한 일이니깐..

 

메모리에 접근한다는건 어떤 것일까?

그전에 메모리는 무엇일까?

 

오늘은 메모리의 개념과 C++에서 메모리를 어떻게 접근하는지에 대해 정리해보려 한다.

 

2)본론

1. 메모리는 무엇일까?

영화 '이미테이션 게임' 의 실제 주인공인 엘런 튜링은 당시에 이미테이션 게임이라는 논문을 낸다.

해당 논문에서의 주내용은 인간을 따라하는 기계이다. 

추후, 개념이 발전하여 인공지능의 개념의 초석이 된 내용이기도 하다.

 

기계가 어떻게 인간을 따라할 수 있었을까? 

간단하게 인간이 일을 처리할 때 행동들을 잠깐 나열해보자.

문제가 발생한다.

인간은 생각을 하고,

생각한것을 정리하고,

문제가 해결되면 정리된 것들을 종이나 사진 등으로 기록을 남긴다.

 

위 행위를 컴퓨터와 대응하면 어떻게 될까?

인간의 생각은 CPU

생각하는걸 종이에 적는 행위는 메모리

기록을 남기는 행위는 디스크

이렇게 대응이 될 것이며

전부는 아니지만 기계는 얼추 인간의 문제해결 과정을 따라할 수 있는 정도는 될것이다.

 

결국 메모리의 역할은 CPU가 처리할 데이터들을 임시적으로 저장,기록할 수 있게 해준다.

 

인간도 그렇고 컴퓨터도 그렇고 생각(CPU)만으로는 문제해결은 분명 어려울 것이다.

따라서 메모리의 존재는 필수적이며 필수적이기에 우리는 메모리와 친해져야하고 접근,관리에 대해 알아야 한다.

그럼 C++에서는 어떻게 메모리에 접근하는지 알아보자.

 

2. 포인터의 등장

void foo()
{
   int a = 3;
}

자,

이전에 기록한 프로세스의 메모리 구조 포스팅에서 메모리 어디에 저장이 될까?

https://eeasyy.tistory.com/40

 

프로세스의 메모리 구조

앞에서 포스팅한 프로세스는 컴퓨터로부터 메모리 공간을 할당을 받는다고 정리를 하였다. (자세한 내용은 아래 포스팅 참고) https://eeasyy.tistory.com/39 프로세스와 스레드의 차이 개발자 면접에서

eeasyy.tistory.com

변수 a는 스택이라는 곳에 저장된다. 

프로세스에는 스택이라는 공간이 있을 것이고 공간에 정확한 위치(주소)에 변수 a에 대한 정보가 기록된다.

주소는 16진수 형태로 존재하며 

우리는 해당 주소에 접근하기 위해 포인터라는 개념을 사용한다. 

 

이번 포스팅에서는 이것만 기억하자.

어떠한 데이터가 있는 공간의 주소에 접근하기 위해 포인터라는 것을 사용한다는 점! 

 

다음에는 포인터를 사용방법과 왜 굳이 우리가 데이터의 주소까지 알아야하는지.. 면밀히 알아보자

 

그럼 20000!