파이썬의 메모리 관리는 대부분 Python Memory Manager에 의해 수행되지만, 최상의 코딩 방법과 Python Memory Manager 작동 방식에 대한 이해는 보다 효율적이고 유지 관리 가능한 코드로 이어질 수 있다
컴퓨터의 실제 또는 가상 메모리에 빈 공간 블록을 할당하는 프로세스를 이해하는 것이 중요!
메모리 할당에는 두 가지 유형이 있음!
(1) 정적 메모리 할당
프로그램 컴파일시 메모리가 할당 됨
C/C++
고정 크기로만 정적 배열을 선언함
메모리는 컴파일 할 때 할당됨
"스택"은 정적 할당을 구현하는 데 사용함, 이 경우 메모리를 재사용할 수 없음
(2) 동적 메모리 할당
런타임에 메모리가 할당
"힙"은 동적 할당을 구현하는 데 사용됨
필요하지 않은 메모리를 비우고 재사용할 수 있음
파이썬의 모든 것은 객체!
동적 메모리 할당이 파이썬 메모리 관리의 기초라는 것을 의미!
객체가 더 이상 필요하지 않으면 python 메모리 관리자가 자동으로 객체에서 메모리를 회수함
python은 C언어로 구현된 고급 프로그래밍 언어
python 메모리 관리자는 python의 메모리할당을 관리
모든 파이썬 객체와 데이터 구조를 포함하는 개인 힙이 있음
python 메모리 관리자는 요청 시 python 힙을 관리함
python 메모리 관리자에는 객체 별 할당자가 있어서 int, string 등과 같은 특정 객체에 대해 메모리를 명확하게 할당할 수 있음
그 아래에서 원시 메모리 할당자는 운영체제의 메모리 관리자와 상호작용하여 개인 힙에 공간이 있는지를 확인함
python 메모리 관리자는 "블록"이라는 메모리 청크를 관리
동일한 크기의 블록 모음이 "풀"을 구성함
풀은 힙=64 풀에 할당된 256kb 메모리 덩어리인 arena에서 생성됨
객체가 파손되면 메모리 관리자는 이 공간을 동일한 크기의 새 객체로 채움
메소드와 변수는 "스택 메모리"에 작성됨
메소드와 변수가 작성될 때 마다 스택 프레임이 작성됨
이러한 프레임은 메소드가 리턴 될 때마다 자동으로 제거됨
오브젝트 및 인스턴스 변수는 "힙 메모리"에 작성됨
변수와 함수가 반환되자마자 죽은 개체는 가바지 수집됨
python 메모리 관리자가 반드시 메모리를 운영체제로 다시 릴리즈 할 필요는 없으며 대신 메모리가 python 인터프리터로 다시 리턴 됨
파이썬에는 작은 객체 할당자가 있어 추후 사용을 위해 메모리를 할당함
장기 실행 프로세스에서 사용되지 않는 메모리의 증분 예약이 있을 수 있음