프로그래밍/TIL(Today I Learned)

10강 영역과 수명(2)

가라멜 2018. 10. 14. 22:55
반응형

1. 언어에서의 영역

- C, C++, Java

- Algol과 같은 개념의 블록 중심 언어

- 복합문을 위해서 시작과 마침을 표시하는 기호로 {} 사용

- C

- 외부영역 : 어느 블록에도 속하지 않고 모든 함수 전체를 영역으로 하는 부분, 외부영역만 전역영역을 가짐

- C++, Java

- 변수 정의가 함수의 어느 부분에서도 나타날 수 있음

- 변수 정의가 함수의 시작부 이외에 나타나면 그 정의문부터 함수의 끝까지 그 변수의 영역이 됨

- For 문의 초기화 식에 제어변수가 새로 정의되는 것을 허용함

- 블록 구조를 통한 영역의 개념

- 변수를 사용할 프로그램 문장 근처에서 선언하도록 하기 때문에 프로그램의 지역성을 높여줌

- 프로그램 문장과 변수의 지역성은 프로그램의 효율적 수행에 도움

- 루티능로 구성된 표준 패키지를 프로그래머 프로그램에 결합시켜 하나의 프로그램을 만들기 쉬움


2. 변수의 수명

- 변수가 값을 저장하기 위해 기억장소를 할당받고 있는 기간

- Fortran : 모든 변수의 수명은 포로그램의 수명과 동일

- Algol 60 : 지역변수의 수명은 선언된 블록의 활성화에 의존

- C 언어에서의 변수 속성

- 자동할당 : C언어에서 주로 사용하는 방법, 그 변수가 포함된 블록의 범위와 동일

- 정적 할당 : 프로그램 시작 시 기억장소가 할당, 블록이 끝나더라도 기억장소 값은 유지, 프로그램 종료 시 회수

- 프로그래머 지정 할당 : malloc() 함수를 이용하여 기억장소 할당, free()함수를 호출하여 회수할 때까지 유지


- 환경(environment)

- 지역 단위로 묶여진 장소와 관련된 모든 식별자를 정의

- 지역 변수, 진입점, 비지역 변수에 접근하기 위한 정보 및 그 블록에서 선언된 프로시저와 레이블을 포함

- 실행시간 동안 각 블록은 하나의 새로운 환경을 가짐

- 선언문은 새로운 호나경을 만들고 할당문은 새로운 값의 저장을 의미


- 영역과 수명

- Algol 

- 영역 : 프로그램의 외형적인 구문과 관계

- 수명 : 프로그램 실행과 관련

- Fortran, Alogl, Pascal

- 모두 정적 영역 규칙을 따름

- 수명은 언어별로 다름


- 동적 수명

- 프로그래머에게 기억 장소의 수명 제어권을 부여하는 것

- 기억장소 회수 방법

- 정적 할당 회수 : 기억 장소를 실행시간 내내 할당하다가 주프로그램 종료시 회수

- 명시적 해제 : 할당된 기억장소를 해제하는 명시적 명령어를 제공

- 쓰레기 수집 : 프로그램에서 더 이상 참조가 없더라도 계속 기억장소에 존재

 :  사용 가능한 기억장소 풀이 작아지면 자동적으로 사용하지 않는 기억장소를 모아 사용 가능하도록 재생

 :  문제점 - 재생시간이 많이 필요하고 그 재생이 예측할 수 없이 발생함


- C 언어에서의 영역과 수명

- 영역 단위 : 파일 범위, 함수 범위, 블록 범위

- 파일 범위를 넘는 변수

- 전역 변수는 파일 범위 내에서 사용 가능

- 하나의 큰 프로그램은 여러 개의 소스 코드 파일로 이루어지므로 각 소스 파일 사이에 선언된 변수를 이용할 수 있는 방법 필요

- extern : 외부 파일에 있는 변수를 연결하여 사용할 수 있음


반응형

'프로그래밍 > TIL(Today I Learned)' 카테고리의 다른 글

12강 동적 기억장소 할당  (0) 2018.10.16
11강 기억장소 할당  (0) 2018.10.16
9강 영역과 수명(1)  (0) 2018.10.14
8강 자료형(2)  (0) 2018.10.14
6강 Context-free 문법의 효율화  (0) 2018.10.14