메모리 할당 (Memory allocation)
- 정적 메모리 할당
- 프로그램 컴파일시 메모리가 할당 (C/C++) 고정 크기로만 정적 배열 선언
- 메모리는 컴파일할 때 할당되며, 스택은 정적 할당을 구현하는데 사용
- 이 경우 메모리 재사용이 불가능
- 동적 메모리 할당
- 프로그램 런타임시 메모리가 할당 (C/C++), new() 연산자를 사용하여 배열 선언
- 메모리는 런타임에 할당되며, 힙은 동적 할당을 구현
- 필요하지 않은 메모리를 비우고 재사용 가능
파이썬의 메모리 관리
파이썬의 모든것은 객체 이고, 동적 메모리 할당이 파이썬 메모리 관리의 기초
- 객체가 더 이상 필요하지 않으면 Python Memory Manager 가 자동으로 객체에서 메모리 회수
- C/C++ 또는 자바의 경우 malloc과 같은 함수를 이용해서 동적 할당을 사용
Python은 동적 할당의 기능이 없음, 사용자가 직접 메모리 할당 범위를 조정하지 않음
- Pythom Memory Manger : 포인터를 움직여 힙 영역의 메모리 할당 범위와 내부 버퍼를 조정, python memory manager 는 Python/C API를 통해 스토리지를 동적으로 관리
C언어에서 x=10과 같이 변수를 할당하면 메모리에 해당 값이 바로 저장되지만 파이썬은 10이라는 int object를 만들어 놓고 변수 x가 그것을 가리키는 형태
- y = x라고 하면 x에 의해서 이미 만들어진 10이라는 int object를 y가 가리킴(x 와 y는 같은 object)
- x = x+1은 11이라는 새로운 int object를 생성, x는 새롭게 만들어진 int object를 가리킴
- z = 10 이라는 값을 생성하면 10 int object는 이미 생성되어 있으므로 가리키기만 한다.