본문 바로가기

B1:기초 Basement

기억장소와 생명시간 (memory and lifetime)

반응형
기억장소 할당
- 변수의 값을 기억시킬 기억장소를 할당(allocation)하면 변수의 메모리 위치가 바인딩됨
- 변수의 필요성이 없어지면 할당된 기억장소가 반납됨

생명 시간(lifetime)
- 변수의 값과 기억장소가 바인딩되어 있는 시간간격
- 생명시간에 따른 변수 분류 : 정적변수, 스택변수, 명시적 히프변수, 묵시적 히프변수

1. 정적 변수(static variable)
기억장소가 실행 이전에 바인딩되어 실행종료까지 계속되는 변수이며, 실행시간 전체에 걸친 생명시간을 가진다. 해당 단위 프로그램이 실행중이 아닌 동안에도 바인딩이 유지됨. C/C++, Java에서는 static을 지역변수의 선언 앞에 붙이면 정적 변수로 선언된다. 전역 변수도 정적 변수로 볼 수 있다

(1) 장점
  프로그램 실행중 기억장소 위치 불변. 바로 접근 가능
  할당과 반납이 필요 없기 때문에 실행시간이 단축됨
(2) 단점
  변수 위치가 메모리상에 고정되어 있기 때문에 순환프로시저 작성이 불가능하다
  변수들간에 기억장소를 공유할 수 없어서 기억장소 관리가 비효율적이다


2. 스택 변수(stack variable)
변수가 선언된 블럭이 실행될 때 생성되고, 그 블럭을 벗어날 때 소멸됨.준 정적변수(semistatic)
(1) 장점
  순환프로시저 작성 가능하고, 기억장소를 효율적으로 사용할 수 있음
(2) 단점
  기억장소를 효율적으로 사용할 수 있다
  실행시 기억장소를 관리하기 위한 시간이 필요하고,
  스택지역을 변수에 할당함으로 인한 POP, PUSH연산 필요->연산처리에 시간이 소요됨


3. 명시적 힙(heap) 변수
프로그래머가 필요에 따라 명령어를 써서 생성,소멸시킴. 메모리의 힙 영역에 할당됨. 포인터를 사용하여 접근함. C언어 : malloc, C++/Pascal/Ada : new, delete
(1) 장점
  동적 자료구조에 적합하고 나무구조, 리스트구조에 유용하다
(2) 단점
  포인터 접근으로 인해 오류발생 위험 증가


4. 묵시적 힙(heap) 변수
변수에 값이 부여될 때 힙(heap)의 기억장소가 할당됨.APL,Perl에서 지원
(1) 장점
  프로그램 융통성 증가
(2) 단점
  동적 속성 처리를 위한 실행시간 증가
  컴파일러 오류처리능력 저하
반응형