1. 오버헤드의 정의
- 오버헤드는 주요 작업을 수행하는 데 추가로 드는 비용을 의미한다.
1) 메모리 오버헤드
- 실제 데이터를 저장하는 데 필요한 순수한 메모리 공간 이외에 추가로 필요한 메모리.
- 예를 들어, 변수의 이름, 타입, 참조 정보 등을 저장하기 위해 추가 메모리 공간이 필요하면, 그것이 바로 메모리 오버헤드
2) 시간 오버헤드
- 데이터를 처리하거나 찾는 데 추가적인 연산 시간이 발생하는 것.
- 예를 들어, 해시 테이블에서 충돌을 해결하거나 데이터를 재구성하는 과정에서 발생하는 시간 비용.
2. 전역 변수에서의 오버헤드
다음과 같은 코드를 바탕으로 논의해 보자.
globals()['var_0'] = 10
1) 변수 이름 관리
- 'var_0'이라는 이름을 전역 네임스페이스에 등록해야 함.
- 이 이름이 어디에 위치하는지, 해시 값은 무엇인지 따로 저장해야 함
2) 타입 정보 저장
- 값이 10이라는 정수형 데이터임을 파악하고, 이 타입 정보를 저장해야 함
3) 참조 관리
- 메모리 어딘가에 10이 저장되어 있고, 'var_0'가 그 위치를 가리켜야 함.
4) 해시 테이블 관리
- 전역 변수들이 해시 테이블로 관리되므로 해시 충돌 방지를 위해 추가적인 빈 슬롯을 유지함.
3. 딕셔너리에서의 오버헤드
다음과 같은 코드를 바탕으로 논의해 보자.
data = {'var_0': 10}
1) 키와 값만 저장
- 키 'var_0'와 값 10만 저장.
- 전역 네임스페이스 관리와 관련된 경량화된 메타데이터가 필요하긴 하나 상대적으로 매우 작다.
2) 스코프 제한
- 딕셔너리는 전역이 아니라 특정 스코프 내에서만 사용되므로 메모리 관리가 간단하다.
- 필요 없으면 바로 가비지 컬렉션을 통해 메모리가 해제된다.
- 따라서 전역 변수보다 오버헤드가 적고, 메모리 효율이 더 좋다.
'Programming' 카테고리의 다른 글
Python 딕셔너리의 메모리 관리 구조(a.k.a hash table) (0) | 2024.12.28 |
---|---|
Python에서 반복문을 활용한 동적 변수 생성 및 관리 2. (딕셔너리 최고) (0) | 2024.12.28 |
Python에서 반복문을 활용한 동적 변수 생성 및 관리 1 (0) | 2024.12.28 |