[CS50] 5. 메모리

찐새·2022년 3월 11일
0

CS50

목록 보기
6/6
post-thumbnail

(1) 메모리 주소

변수는 할당된 값의 메모리 주소를 기억한다. 메모리 주소는 0~15로 이뤄진 16진수(Hexadecimal)로 표현되며, 10~15는 a~f로 적는다.

메모리 주소

변수 n에 50을 할당했다면, 컴퓨터는 메모리상 어딘가에 50을 저장하고, n은 해당 값의 주소를 받는다. n을 출력할 시 주소를 따라가 저장된 값인 50이 출력된다.

(2) 포인터

포인터는 변수의 주소를 가리킨다. 주소명을 불러올 수도 있고, 자료형의 주소를 통해 여러 가지 다른 자료형을 정의할 수도 있다. 이러한 포인터 이용은 대형 IT기업이 데이터 다룰 때 사용하는 알고리즘의 기초를 이룬다.

포인터

(3) 메모리 할당과 해제

메모리가 할당된 값을 모두 사용한 후에는 해제를 해야 한다. 그렇지 않으면 메모리 누수가 발생할 수 있다. 어떤 프로그램을 실행하는 동안 시스템 성능이 점점 떨어진다면 메모리 누수의 가능성이 있다.

해제되지 않은 채 남아있는 값을 쓰레기 값(Garbage value)라고 한다. 이는 사용하지 않으면서 메모리 공간을 차지하고 있어 메모리 누수의 원인이 된다. 때문에 쓰레기 값을 지속적으로 비워줘야 한다. 대부분의 프로그래밍 언어는 가비지 콜렉터를 통해 이러한 현상을 해결한다.

(3) 메모리 교환, 스택, 힙

메모리에는 여러 공간이 존재한다.

메모리 공간

machine code 영역에는 프로그램이 실행될 때 그 프로그램이 컴파일된 바이너리가 저장되고, globals 영역에는 전역 변수가 저장된다. 그리고 heap 영역에는 할당된 메모리의 데이터가 저장된다. 마지막 stack에는 프로그램 내의 함수와 관련된 것들이 저장된다.

stack에서 객체가 생성되어 heap 영역에 적재되어야 사용할 수 있게 된다. 또한, stack은 각 함수 등에 서로 다른 공간을 할당해 각 변수의 값에 영향을 미치지 않는다. A(a, b)에서 실행한 값을 x, y에 리턴하려면 주소를 참조해야 한다.

profile
프론트엔드 개발자가 되고 싶다

0개의 댓글