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) 스코프 제한

  • 딕셔너리는 전역이 아니라 특정 스코프 내에서만 사용되므로 메모리 관리가 간단하다.
  • 필요 없으면 바로 가비지 컬렉션을 통해 메모리가 해제된다.
    • 따라서 전역 변수보다 오버헤드가 적고, 메모리 효율이 더 좋다.

 

 

HardConcentrator