일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- SQL
- 운영체제
- DataWarehouse
- 클라우드
- 데이터엔지니어링
- 데브코스
- 데이터엔지니어
- 관계형데이터베이스
- 에어플로우
- 알고리즘
- 취준
- Amazon
- 웹스크래핑
- 기술면접
- CS
- Django
- 프로그래머스
- 웹자동화
- 개념정리
- 파이썬
- 부트캠프
- WEB
- 데이터웨어하우스
- Service
- airflow
- 자료구조
- 데이터베이스
- 개발
- 웹크롤링
- AWS
- Today
- Total
사진과 음악을 좋아하는 개발자 지망생의 블로그
메모리 구조와 python memory management 본문
1. 메모리 구조
메모리 구조에는 크게 code, data, stack, heap이 있다
code에는 실행할 프로그램의 코드가
data에는 전역변수와 정적 변수가
stack에는 함수의 매개변수와 지역변수가
heap에는 동적으로 할당하는 변수나 메소드가 저장된다
data를 조금 더 분해하면 초기화된 영역과 초기화되지 않은 영역(BSS)이 있다
2. Python Memory Management
파이썬은 python memory management 에 의해 관리되고 있다
파이썬에서 변수가 선언되면 변수에 값이 들어가는 것이 아니라
python memory management에 의해 heap영역에서 선언된 변수에 메모리 영역을 할당해 주고
변수에는 할당된 변수의 '주소'가 저장된다. 그리고 주소에 해당된 메모리에 변수에 담은 값이 저장된다.
예를들어, a = 10
a = 1
이라는 명령어를 실행하면
python memory management에 의해 heap영역에 10을 저장할 메모리를 할당하여 저장한 뒤, 할당된 메모리의 주소를
'a'라고 지정하는 것이다.
만약,
a = 1, b = 1
이라고 하면,
heap영역에 10을 저장할 메모리를 '하나'를 할당하여 저장한 뒤 할당된 메모리의 주소를
'a', 'b'라고 지정한다.
즉, 'a'와 'b'는 이름만 다른 하나의 메모리 공간과 주소를 공유하는 것이다.
다음은, a = a + 1 일때의 경우
heap영역에 같은 메모리 공간에 값을 바꾸는게 아니라 11을 저장할 메모리를 할당하여 저장한 뒤, 할당된 메모리의 주소를
'a'라고 지정하는 것이다.
만약, a = 10, b = 10, a = a + 1일때 a is b의 결과는 False가 된다. 왜냐?
a의 주소는 값이 변함에 따라 주소도 바꼈기 때문이다.
그렇다면, heap에 있는 메모리가 더이상 사용하지 않은 쓰레기 메모리가 되면 메모리를 관리하는 python memory management는 이를 어떻게 처리할까?
python에서는 가비지 컬랙션을 레퍼런스 카운팅을 통해 Number of references 가 0이 될 때 메모리 할당을 해제하게 된다
'CS > 자료구조 & 알고리즘' 카테고리의 다른 글
메모리 구조와 자료 구조 간 힙(Heaps)의 차이 (0) | 2023.07.12 |
---|---|
자료구조 초간단 정리(Array ~ Heaps) (0) | 2023.07.12 |
정렬(sort) & 탐색(search) (0) | 2023.04.14 |
힙(Heap) (2) | 2023.04.14 |
트리 level 2 (이진 트리, Binary Tree) (0) | 2023.04.14 |