바인딩, 메모리 관리 SANGJI University Kwangman Ko

Slides:



Advertisements
Similar presentations
Copyright © 2006 The McGraw-Hill Companies, Inc. Programming Languages 프로그래밍 언어론 2nd edition Tucker and Noonan 1 장 소 개 A good programming language is a.
Advertisements

Copyright © 2015 Pearson Education, Inc. 6 장 : 프로그래밍 언어.
YES C 제 1 장 C 언어의 개요 1/34 제 1 장 C 언어의 개요 문봉근. YES C 제 1 장 C 언어의 개요 2/34 제 1 장 C 언어의 개요 1.1 프로그램과 C 언어의 특징 1.2 C 언어의 프로그램 구성 1.3 비주얼 C++ 통합 환경 들어가기.
Copyright © 2006 The McGraw-Hill Companies, Inc. 프로그래밍 언어론 2nd edition Tucker and Noonan 5 장 타입 “ 타입은 컴퓨터 프로그래밍의 효소이다 ; 프로그래밍은 타입을 통해 소화할만한 것이 된다.” 로빈.
제 4 장 변수, 영역, 수명 변수 바인딩 영역 기억장소 할당과 수명 변수와 그 환경 변수 초기화 상수와 변수.
3. C++와 객체지향 C++ 코딩 방법 객체 단위로 2 개의 파일 인터페이스 파일 구현파일
Vision System Lab, Sang-Hun Han
제 3 장 변수와 자료형.
Programming Languages Type Conversion Classifying Type Conversions According to the notation –Implicit Conversions (coercion) –Explicit Conversions (casting)
C++ Tutorial 1 서강대학교 데이터베이스 연구실.
컴퓨터 응용 및 실습 Part1. OOP&Java Programming data type Review
Power C++ 제6장 포인터와 문자열.
C++ Espresso 제1장 기초 사항.
제 1장 C 언어의 소개.
Internet Computing KUT Youn-Hee Han
알기 쉽게 해설한 Java 8th edition
제 7 장 문장 구조화 제어문 지정문 조건문 반복문 GOTO 문 비결정적문.
제6장 제어(Control) 6.1 구조적 프로그래밍(Structured Programming)
C++ 프로그래밍 년 2학기 전자정보공학대학 컴퓨터공학부.
제 6 장 데이터 타입 6.1 데이터 타입 및 타입 정보 6.2 타입의 용도 6.3 타입 구성자 6.4 사례 연구
Internet Computing KUT Youn-Hee Han
2주 실습강의 Java의 기본문법(1) 인공지능연구실.
Chapter 02 자바 기본구조 자바 프로그래밍의 기초적인 문법을 소개
제7장 제어구조 I – 식과 문장.
공학기초설계 Youn-Hee Han 강의 소개 & MinGW & gcc 공학기초설계 Youn-Hee Han
Power Java 제4장 자바 프로그래밍 기초.
10장 객체-지향 프로그래밍 II ©창병모.
프로그래밍언어론 2nd edition Tucker and Noonan
Part 08 함수 ©우균, 창병모 이 슬라이드는 부산대학교 우균이 작성하였습니다. 오류나 수정할 사항 있으면 연락 주세요.
Chapter 6 – 변수, 바인딩, 식 및 제어문 Outline 6.1 변수 6.2 바인딩 6.3 선언 6.4 배정문
CHAP 3:배열, 구조체, 포인터.
Chapter 9 – 부 프로그램 Outline 9.1 개요 9.2 매개변수 평가와 전달기법 9.3 형식 매개변수 명세
Ch2-2. VHDL Basic VHDL lexical element VHDL description
장. 문법 구조(Syntax) 컴퓨터공학과 권기태 프로그래밍언어론.
[INA240] Data Structures and Practice
3장. 포인터, 배열, 구조체 포인터, 배열, 구조체 학습목표 기본적 데이터 타입
2장 자바환경과 자바 프로그램 2.1 자바 개발 환경 2.2 자바 통합환경 2.3 자바 응용 프로그램과 애플릿 프로그램
윤 홍 란 4 장 클래스 작성 윤 홍 란
C++ 프로그래밍 년 2학기 전자정보공학대학 컴퓨터공학부.
C ++ 프로그래밍 시작.
Chapter 1 C++ 기초 Copyright © 2010 Pearson Addison-Wesley. All rights reserved.
제 2 장 변수와 상수.
5장 이름, 바인딩, 영역(2) 순천향대학교 컴퓨터공학과 하상호.
adopted from KNK C Programming : A Modern Approach
Chapter 2 Lexical Elements, Operators, and the C System
제 10장 부 프로그램 10.1 개요 10.2 매개 변수 평가와 전달 기법 10.3 형식 매개 변수 명세
운영체제 (Operating Systems) (Memory Management Strategies)
Introduction to Programming Language
6장 데이터 타입(2) 순천향대학교 컴퓨터공학부 하 상 호.
프로그래밍언어론 2nd edition Tucker and Noonan
컴퓨터공학실습(I) 3주 인공지능연구실.
제 5장 변수, 바인딩, 식 및 제어문 5.1 변수 5.6 표현식 5.2 바인딩 5.7 조건문 5.3 선언 5.8 반복문
Machine architecture Programming Language Design and Implementation (4th Edition) by T. Pratt and M. Zelkowitz Prentice Hall, 2001 Chapter 2.
Chapter 4 변수 및 바인딩.
Signature, Strong Typing
Signature, Strong Typing
Chapter 13 – 객체 지향 프로그래밍 Outline 13.1 소프트웨어의 재사용과 독립성
03. 메모리 관리 C++ 프로그램에서 다룰 수 있는 메모리의 종류
Signature, Strong Typing
Machine architecture Programming Language Design and Implementation (4th Edition) by T. Pratt and M. Zelkowitz Prentice Hall, 2001 Chapter 2.
창 병 모 숙명여대 전산학과 자바 언어를 위한 CFA 창 병 모 숙명여대 전산학과
자료구조 세미나 발표 주제: 자료구조 기초 - 1회 차: 자료구조의 정의, 기초 지식 (함수, 포인터, 레퍼런스)
제5장 디버깅과 추적 문봉근.
Machine architecture Programming Language Design and Implementation (4th Edition) by T. Pratt and M. Zelkowitz Prentice Hall, 2001 Chapter 2.
C.
printf("Global Korea\n");
Signature, Strong Typing
제 1장 프로그래밍 언어 소개 1.1 프로그래밍 언어란 무엇인가 1.2 프로그래밍 언어를 배워야 하는 이유
Scalar and composite data
C++ 언어의 특징
Presentation transcript:

바인딩, 메모리 관리 SANGJI University Kwangman Ko (kkman@sangji.ac.kr) 프로그래밍언어론(2006, 상지대학교)

속성(attributes) 속성(attributes) 특성(properties)들의 집합 변수의 위치(location) 값이 저장될 수 있는 공간, 컴퓨터 메모리 주소 값(value) 저장 가능한 대상 타입(data type) 저장되는 값의 범위(range) 결정 명칭(= 식별자 = identifiers) 영역(scope) 존속기간(life-time) … kkman@sangji.ac.kr

int *y; (in C), y=new int; (in C++) const int n = 5 ; Q) 명칭 n 의 의미를 결정하는 것 ? A) 속성 double func ( int n ) { … } 매개변수 수, 매개변수 이름, 매개변수 자료형 반환 자료형(return type), double 함수 호출시 실행되는 코드 부분 int *y; (in C), y=new int; (in C++) 의미 ? 기억 공간의 구조를 그림의 표현 ? kkman@sangji.ac.kr

바인딩(Binding) ? 정의 어떠한 대상(변수와 같은)과 성질(변수의 값과 같은)의 연결 이름에 어떤 속성을 연결하는 과정 속성과 개체의 결합, 연산과 기호의 결합, … 프로그램의 기본 단위에 이 단위가 택할 수 있는 여러 속성 중에서 일부를 선정하여 결정하는 행위 kkman@sangji.ac.kr 프로그래밍언어론(2006, 상지대학교)

종류 바인딩이 발생되는 시점 ? 정적 바인딩(static binding) 이름과 대상의 연결 작업이 실행시간 이전에 일어나는 바인딩. 동적 바인딩(dynamic binding) 이름과 대상의 연결 작업이 실행시간에 일어나는 바인딩 바인딩이 발생되는 시점 ? kkman@sangji.ac.kr 프로그래밍언어론(2006, 상지대학교)

Example of Binding Type: integer Value: 2 Type: integer pointer // C++ example int x, *y; x = 2; y = new int(3); x Type: integer Value: 2 y Type: integer pointer Value: ∙ → 3 kkman@sangji.ac.kr

바인딩 시간(binding time) 바인딩 시간(binding time) 바인딩 시간의 분류(categories) 실제로 바인딩이 일어나는 시간 바인딩 시간의 분류(categories) 정적 바인딩(static binding) 실행 시간 이전에 일어나는 바인딩 동적 바인딩(dynamic binding) 실행 시간에 일어나는 바인딩 kkman@sangji.ac.kr

Further Refined Binding Time Language definition time Language implementation time Program translation time Link time, Load time Execution time (run time) kkman@sangji.ac.kr

명칭(identifier)에 대한 자료형 수식(expression)의 값 execution time if it contains variables translation time if it is a constant expression 명칭(identifier)에 대한 자료형 translation time in a compilation system C, C++, C#, Java, … execution time in an interpreter LISP, APL, SNOBOL4, … kkman@sangji.ac.kr

정수(integer) 변수의 위치(location) language definition time, 정수의 부분 집합 language implementation time, 최대 및 최소 범위 변수의 위치(location) load time for static variables (static in C) execution time for dynamic variables (auto in C) kkman@sangji.ac.kr

구문 문제 이름 결정 규칙 대소문자 구분(Case sensitivity) 어휘 규칙(Lexical rules)에 의하여 이름 형태가 결정. 예) C/Clite 언어 등 문자로 시작, … 대소문자 구분(Case sensitivity) C언어 류 : yes 초기의 언어들 : no PHP: 부분적으로 구분 또는 비구분 kkman@sangji.ac.kr 프로그래밍언어론(2006, 상지대학교)

예약어(reserved words), 지정어(keywords) 특별한 의미를 가지는 명칭 일반적인 명칭(변수 이름, 함수 이름 등)으로 사용할 수 없음 예약어 미리 정의된 식별자의 예 : 라이브러리 함수명 명칭의 재정의, 예약어 해로울까 ? Or 해롭지 않을까 ? 예) C : typedef int Integer kkman@sangji.ac.kr 프로그래밍언어론(2006, 상지대학교)

Symbol Table and Environment 번역/실행되는 동안 명칭에 적절한 의미 정보 부여/관리 바인딩 정보를 저장하고 있는 언어 번역기의 자료 구조. Mathematically, a function SymbolTable: Names → Attributes kkman@sangji.ac.kr

해석(interpretation) 시스템 컴파일 시스템 다양한 속성이 다양한 함수에 의해 유지 심벌 테이블 : Names → (Some) 정적 속성 환경 : Names → 메모리 위치(locations) 메모리 : Locations → Values 해석(interpretation) 시스템 정적 및 동적 속성이 모두 실행 시간에 계산 심벌 테이블과 환경이 조합 환경 : Names → Attributes kkman@sangji.ac.kr

선언(declarations) 선언 : 바인딩을 구성하는 중요한 방법 묵시적(implicit) 바인딩 명시적(explicit) 바인딩, 명확한 지정 Example( in C ) int x; the type binding is an explicit binding the location binding is an implicit binding 초기값 kkman@sangji.ac.kr

묵시적 선언 명칭 사용 규칙(naming convention) FORTRAN example the variable whose name starts with I, J, K, L, M, or N is implicitly an integer BASIC example the trailing % of variable means an integer, $ means a string kkman@sangji.ac.kr

Different Terms for Declarations 정의(definition) a declaration that binds all potential attributes 모든 잠재적인 속성을 바이딩하는 선언 선언(declaration) a declaration that binds only a part of attributes 속성 일부분만을 바인딩하는 선언 kkman@sangji.ac.kr

함수 선언( in C ) double f(int x) ; 원형(prototype) 구현 몸체는 기술하지 않음. binds only the type (the interface) of the function kkman@sangji.ac.kr

블록과 지역성 블록(block) 선언과 참조의 지역성(locality) 선언과 문장들의 연속으로 구성된 언어 구조 할당의 단위(unit of allocations) 선언과 참조의 지역성(locality) 지역적(local): 명칭에 대한 선언과 참조가 동일 블록으로 제한 비지역적(non-local) the declaration of a name is not in the block which contains the reference for the name kkman@sangji.ac.kr

void p (void) { double r, z; /. p 블록. / … int x, y; /. 내포된 블록 void p (void) { double r, z; /* p 블록 */ … int x, y; /* 내포된 블록 */ x = 2; y = 0; x += 1; } kkman@sangji.ac.kr

블록 구조화(Block-Structured) 블록 구조화 프로그램 중첩될 수 있는 여러 개의 블록으로 구성된 프로그램 Algol60에서 시도 후손 언어에서 블록 구조를 다양한 방법으로 제공 순차 블록 : Pascal 비순차 블록 : Ada, C -- Ada example declare x: integer; begin … end (* Pascal example *) program ex; var x: integer kkman@sangji.ac.kr

구조화 자료형(Structured Data Type) a type declaration which contains declarations 내포된 선언(nested declaration) 구조체 in C, 클래스 in C++, Java, Smalltalk 모듈(Module) or 패키지(Package) a collection of declarations the collection itself is not a declaration Ada: package and task Java: package ML and Haskell: module C++: namespace kkman@sangji.ac.kr

영역, 스코프(Scope) 바인딩의 영역(Scope of a Binding) 이름의 영역(Scope of a Name) 바인딩이 유지되는 범위, 위치가 중요 정보 선언에 의해 결정된 바인딩이 동일 영역 유지, 선언의 영역 이름의 영역(Scope of a Name) 동일 이름이 중복되어 선언될 수 있음 => 위험 these different declarations of the same name should be differentiated kkman@sangji.ac.kr

영역 규칙(Scope Rules) 정적(static) 영역 규칙 동적(dynamic) 영역 규칙 블록 영역이 선언을 포함하고 있는 블록내부로 제한 대부분의 블록 구조 프로그램은 정적 영역 규칙을 따름 동적(dynamic) 영역 규칙 바인딩 영역이 실행 경로(path)에 따라 결정 심볼 테이블이 동적으로 정보를 유지 kkman@sangji.ac.kr

Lexical Scope Example (C) int x; void p(void) { char y; ... } /* p */ void q(void) { double z; } /* q */ main() { int w[10]; } x In C, the declaration before use rule apply. y p z q main w kkman@sangji.ac.kr

Scope Holes 영역 구멍(scope hole) ? 가시성(visibility) 영역(scope) 명칭의 지역 선언은 동일한 이름의 이전(prior) 선언을 마스크(mask) 함. 마스크된 선언은 해당 블록 전체에 대해 영역 구멍을 갖음. 가시성(visibility) 선언된 명칭의 바인딩이 적용되는 부분(영역 구멍 배제) 영역(scope) 바인딩이 존재하며 가시성이 숨겨진 영역 포함(영역구멍 포함) kkman@sangji.ac.kr

int x; void p(void) { char x; x = ‘a’; /. char x에 배정. / … } /. p int x; void p(void) { char x; x = ‘a’; /* char x에 배정 */ … } /* p */ main() x = 2; /* 전역 x에 배정 */ ... } kkman@sangji.ac.kr

Scope Resolution Operator // C++ example int x; void p(void) { char x; x = 'a'; // local x ::x = 42; // global x ... } /* p */ main() x = 2; // global x } The global integer variable x has a scope hole in the body of p. In C, the global x cannot be referenced in p. In C++, the global x can be referenced in p using a scope resolution operator ::. Ada also has a scope resolution operator .. kkman@sangji.ac.kr

File Scope in C File Scope In C, a global name can be turned into a file scope name by attaching the keyword static. A file scope name can only be referenced in that file. extern int x; ... x File 1 int x; File 2 static int x; File 3 kkman@sangji.ac.kr

Java Scope Example public class Scope { public static void f() { System.out.println(x); } public static void main(String[] args) { int x = 3; f(); public static int x = 2; kkman@sangji.ac.kr

클래스 선언( in Java ) 출력되는 값 ? 선언의 영역을 클래스 전체 the above code prints 2. under dynamic scope rule, the code would print 3. kkman@sangji.ac.kr

동적 스코프(dynamic scope) 동적 스코드의 단점(disadvantages) Next chapters … 선언의 영역이 정적으로 결정되지 않음. 선언의 영역을 결정하기 위해 Hand-simulation 수행. 명칭의 자료형이 정적으로 결정될 수 없음. 정적 자료형 검사(static type-checking) 불가능 Next chapters … kkman@sangji.ac.kr

Symbol Table Maintenance 심볼 테이블이란 ? 명칭에 연관된 모든 속성을 저장하는 공간 효율적인 삽입, 검색, 삭제 연산 방법 효율적 접근과 유지를 위한 자료구조 해쉬 테이블, 트리, 연결 리스트, … 정적 영역(lexically scoped languages) 심볼 테이블이 스택과 같은 방법으로 운영 블록 진입시 모든 선언을 처리하여 대응하는 바인딩 추가 블록 진출시 선언에 의해 제공된 모든 바인딩 제거, 복구 심볼 테이블 운영이 실행 경로(순서)와 무관.

ST under Lexical Scope p y x p x q y p y x p y x q main x p y x q p y void function y char global x int double local to p p void function x int global q y char local to q int x; char y; void p(void) { double x; ... { /* block b */ int y[10]; } void q(void) { int y; main() { char x; p void function y char global x int p void function y char global x int q main x int global p void function y char global x int q p void function y char global x int p void function x int global double local to p y char int[10] local to b p void function y char global x int q main p void function y char global q main int x local to main p void function y char global x int q p void function y char global x int double local to p y char global x int

ST under Dynamic Scope Output Output Output p y q main x p y q main x #include <stdio.h> int x = 1; char y = 'a'; void p(void) { double x = 2.5; printf("%c\n",y) { /* block b */ int y[10]; } void q(void) { int y = 42; printf("%d\n",x); p(); main() { char x = 'b'; q(); return 0; p void function y char='a' global q main int x … char int=42 local to q 98 Output double=2.5 local to p p void function y char='a' global q main int x … char int=42 local to q double=2.5 local to p 98 * Output ASCII 42 = 'b' p void function y char='a' global q main int x int=1 char='b' local to main int=42 local to q 98 Output ASCII value of 'b' p void function y char='a' global q main int x int=1 char='b' local to main int=42 local to q p void function y char='a' global q main int x int=1 char='b' local to main p void function y char='a' global q main int x int=1 kkman@sangji.ac.kr

동적 영역(dynamically scoped languages) 가장 바깥쪽의 명칭의 바인딩이 구성. 바인딩이 프로그램 실행 경로에 따라 유지 비지역 변수 참조에 대해 적용된 실행 순서 추적 방법 ? 비지역 변수의 참조가 실행 이전에 예측할 수 없음. kkman@sangji.ac.kr

다중적재(overloading) 다중적재 ? 서로 다른 엔티티에 대해 명칭을 재사용 같은 이름을 사용하여 프로그램의 다른 대상을 참조 3+4 vs. 3.0+4.0 어셈블리 언어 : ADDI, ADDF 번역기는 피연산자의 자료형을 참고 연산자 중복(operator overloading) C++ 함수 중복(function overloading) C++, Java kkman@sangji.ac.kr

the operator + is overloaded integer addition (say, ADDI) floating point number addition (say, ADDF) How about mixed-type expression? 2 + 3.2 C/C++ : promotion (implicit type conversion). Ada : Error. Signature 반환형, 매개변수 개수, 매개변수 자료형 kkman@sangji.ac.kr

Name resolution max(2,3) // calls max #1 max(2.1,3.2) // calls max #2 int max(int x, int y) // max #1 { return x > y ? x : y; } double max(double x, double y) // max #2 int max(int x, int y, int z) // max #3 { return x > y ? (x > z ? x : z) : (y > z ? y : z); } Name resolution max(2,3) // calls max #1 max(2.1,3.2) // calls max #2 max(1,3,2) // calls max #3 kkman@sangji.ac.kr

Overload Resolution Issues 묵시적 자료형 변환은 모호한(ambiguous) 호출 max(2.1, 3) // max ??? C++: too many candidates (max #1 or max #2) Ada: no candidates Java: 묵시적 자료형 변환은 정보 손실이 없는 경우로 제한 다중 적재에서 반환형의 고려 여부 ? 함수의 반환형을 함수 호출 정보로 포함할것인가 ? C++, Java: not included Ada: included kkman@sangji.ac.kr

Function Overloading in Ada procedure overload is function max(x: integer; y: integer) -- max #1 return integer is begin ... end max; function max(x: integer; y: integer) -- max #2 return float is a: integer; b: float; begin -- max_test a := max(2,3); -- call to max # 1 b := max(2,3); -- call to max # 2 end overload; In Ada, the return type is included in the calling context. kkman@sangji.ac.kr

Operator Overloading in C++ #include <iostream> using namespace std; typedef struct { int i; double d; } IntDouble; bool operator < (IntDouble x, IntDouble y) { return x.i < y.i && x.d < y.d; } IntDouble operator + (IntDouble x, IntDouble y) { IntDouble z; z.i = x.i + y.i; z.d = x.d + y.d; return z; } int main() { IntDouble x = {1, 2.1}, y = {5, 3.4}; if (x < y) x = x + y; else y = x + y; cout << x.i << " " << x.d << endl; return 0; kkman@sangji.ac.kr

Operator Overloading in Ada procedure opover is type IntDouble is record i: Integer; d: Float; end record; function "<" (x,y: IntDouble) return Boolean is ... function "+" (x,y: IntDouble) return IntDouble is ... x, y: IntDouble; begin x := (1,2.1); y := (5,3.4); if (x < y) then x := x + y; else y := x + y; end if; put(x.i); put(" "); put(x.d); new_line; end opover; kkman@sangji.ac.kr

명칭의 재사용 Reusing names for different kinds of entities Separate name space for each kind is needed. These kinds of reusing is not an overloading. Which is which? class name method name parameter name label name typedef struct A A; struct A {  int data;    A * next; }; C example class A { A A(A A)   { A:     for(;;)   { if (A.A(A) == A) break A; }     return A;   } Java example structure tag name type name kkman@sangji.ac.kr

실행 환경(Environment) 환경 환경 결정 시간 모든 명칭이 환경에 연결되는 것은 아님. 명칭과 위치(location)를 연결시키는 것. 환경 결정 시간 정적 환경 : FORTRAN 동적 환경 : LISP 혼합(mixture) : most Algol-style languages 모든 명칭이 환경에 연결되는 것은 아님. 상수 Const int MAX = 10; kkman@sangji.ac.kr

변수에 대한 기억 장소 할당 시간 전역 변수(global variable) 정적 기억 장소 할당 로딩 시간(load time)에 기억 장소 할당 지역 변수 동적 기억 장소 할당 제어가 도달할 때 선언된 변수에 대한 기억 장소 할당 kkman@sangji.ac.kr

전형적인 실행 환경의 구조 정적 영역(static area) 스택 영역(stack) 힙 영역(heap) static allocation 스택 영역(stack) LIFO-style dynamic allocation 정적 기억 장소 할당 힙 영역(heap) on-demand dynamic allocation 동적 기억 장소 할당 kkman@sangji.ac.kr

활성화 레코드(Activation Record) 부 프로그램 호출을 호출하면 ? 각 부프로그램 호출(invocation or activation)에 대해 각 부프로그램에 대한 환경에 구축되어야 함. 활성화 레코드(Activation Record; AR) 부프로그램 호출에 대해 할당되는 메모리 공간 subprogram environment + bookkeeping information kkman@sangji.ac.kr

실행시간 스택(Run-Time Stack) 블록의 진입과 진출이 LIFO 방식으로 운용 프로시쥬어 호출과 반환이 LIFO 방식으로 운용 활성화 레코드들이 실행시간 스택에 저장. kkman@sangji.ac.kr

Run-Time Stack Manipulation A: { int x; char y; B: { double x; int a; } /* end B */ C: { char y; int b; D: { int x; double y; } /* end D */ } /* end C */ } /* end A */ point 1

Run-Time Stack Manipulation A: { int x; char y; B: { double x; int a; } /* end B */ C: { char y; int b; D: { int x; double y; } /* end D */ } /* end C */ } /* end A */ point 2

Run-Time Stack Manipulation A: { int x; char y; B: { double x; int a; } /* end B */ C: { char y; int b; D: { int x; double y; } /* end D */ } /* end C */ } /* end A */ point 3

Run-Time Stack Manipulation A: { int x; char y; B: { double x; int a; } /* end B */ C: { char y; int b; D: { int x; double y; } /* end D */ } /* end C */ } /* end A */ point 4

Run-Time Stack Manipulation A: { int x; char y; B: { double x; int a; } /* end B */ C: { char y; int b; D: { int x; double y; } /* end D */ } /* end C */ } /* end A */ point 5 kkman@sangji.ac.kr

힙(heap) 메모리 영역 관리 힙 메모리(Free Store) 할당 힙 메모리 반환(deallocation) 객체(objects)의 할당에 대해 지원되는 메모리 구역(pool) 환경에서 선언 처리의 결과로 생기는 할당된 기억장소 구역 동적 메모리 공간 힙 메모리 반환(deallocation) 사용을 마친 힙 메모리 구역에 대한 반환 함수 또는 연산자 사용 free() in C, delete in C++, Ada. 자동 반환(automatic deallocation) garbage collector 사용 안전하기는 하지만 속도 저하의 문제점, in Java kkman@sangji.ac.kr

Pointer and Dereferencing 포인터 다른 객체의 위치(=주소)를 값으로 갖는 객체. int *x = NULL; x는 할당된 객체를 가리키기 위해 수동으로 객체 할당 x = ( int * ) malloc( sizeof( int ) ) ; 참조 인출(dereferencing) 주소(pointer value)를 통한 객체 참조. kkman@sangji.ac.kr

/. C example. / int. x; // pointer declaration x = (int /* C example */ int *x; // pointer declaration x = (int*)malloc(sizeof(int)); // memory allocation *x = 5; // dereferencing printf(“%d\n”, *x); free(x); // deallocation /* C++ example */ int* x = new int; *x = 2; cout << *x << endl; delete x; /* Java example */ Integer x = new Integer(2); System.out.println(x); // delete 연산이 필요 없음. kkman@sangji.ac.kr

생명시간(Lifetime) 객체(storable object) 객체의 생명 시간(lifetime or extent) a chunk of memory cells 환경에서 할당되는 기억 장소 구역(area of storage) 객체의 생명 시간(lifetime or extent) 환경에서 기억 장소가 할당되어 소멸까지의 소요 시간 kkman@sangji.ac.kr

생명시간(lifetime) vs. 영역(scope) 변수에 대한 생명시간과 영역은 밀접한 관련은 있지만 동일하지 않음. local static variables in C/C++ 영역 : local, global 생명시간 : static, dynamic kkman@sangji.ac.kr

Local Static Variable Example (C) int p(void) { static int p_count = 0; p_count += 1; return p_count; } main() { int i; for (i = 0; i < 10; i++) { if ( p() % 3 ) printf("%d\n", p() ); return 0; kkman@sangji.ac.kr

변수와 상수 변수(variable) 상수(constants) 리터럴(literals) 실행시간 동안 변환되는 값을 저장하는 객체(=기억공간) 명칭이 실제 메모리 주소로 변환 (언제: ). 상수(constants) 생명시간 동안 변하지 않는 객체의 값 an object whose value does not change for its lifetime 리터럴(literals) 명칭에 의해 값이 명확하게 정해지는 객체 kkman@sangji.ac.kr

Diagrams for Variables Schematic Representation Box-Circle Diagram kkman@sangji.ac.kr

L-value and R-value L-value and R-value l-value (LHS value): the location r-value (RHS value): the value stored X=10(○), x=y(○), 100 = z (×). kkman@sangji.ac.kr

배정(assignment) 배정 variable assingmentOpertor expression (중위법) 변수의 값을 변경하는 가장 기본적인 방법 variable assingmentOpertor expression (중위법) 값의 복사(value-copying)에 의한 배정 포인터에 의한 배정(pointer semantics) 공유에 의한 배정(shallow copying) 복제에 의한 배정(deep copying) ☞ 복제(cloning) 객체를 메모리에 정확히 복사 kkman@sangji.ac.kr

Assignment by Value-Copying 변수의 값이 복사. x = y kkman@sangji.ac.kr

공유(sharing)에 의한 배정 변수의 위치(location)가 복사. x = y 변수 y의 위치가 x에 바인딩. kkman@sangji.ac.kr

복제(cloning)에 의한 배정 변수의 값(value)과 위치(location)가 복제. x = y kkman@sangji.ac.kr

Java Example Java supports 공유에 의한 배정 assignment of object variables 값-복사에 의한 배정 assignment of simple data 복제에 의한 배정 메소드 복제(method clone.) kkman@sangji.ac.kr

A closer view of object assignment in Java x = y kkman@sangji.ac.kr

상수(constant) Semantics 상수 다이어그램 상수의 의미(semantics) 바인딩이 결정되면 실행중 변화가 없음. 상수의 위치는 참조되지 않음. 값만 유지하고 위치 속성을 갖지 않음. kkman@sangji.ac.kr

상수의 분류 리터널 and Named Constants Named Constants 분류 literals: 값을 표현하는 명칭 정적 상수( = 상수) 실행 이전에 값이 계산될 수 있는 상수 컴파일 시간(compile-time) 정적 상수, 적재 시간(load-time) 정적 상수 동적 상수 실행하는 동안에만 값이 계산되는 상수 kkman@sangji.ac.kr

상수 초기화 C the initial value of a static constant (or a static variable) should be computed from literals only C++ the above restriction is removed #include <stdio.h> #include <time.h> const int a = 2; const int b = 27+2*2; /* legal in C */ const int c = (int) time(0); /* illegal C code! */ int b = 27+a*a; /* also illegal in C */ kkman@sangji.ac.kr

별칭(Aliases) 별칭(aliases) 부작용(side effect) 잠정적으로 해로운 부작용 동일 객체에 대해 동시에 두 개 이상의 명칭을 접근 프로그램 판독성 저하 부작용(harmful side effects) 발생 부작용(side effect) 문장의 실행 이후에 변수의 값이 변경되는 것. 잠정적으로 해로운 부작용 부작용을 작성된 문장을 통해서는 결정하기 어려움 실행되는 문장의 앞 부분을 참고해야 알 수 있음. kkman@sangji.ac.kr

An Example of Harmful Aliases main() { int *x, *y; x = (int *) malloc(sizeof(int)); *x = 1; y = x; /* *x and *y now aliases */ *y = 2; printf("%d\n",*x); return 0; } kkman@sangji.ac.kr

별칭의 발생 요인 ? 별칭의 발생 요인 ? 포인터 배정문(pointer assignment) 참조에 의한 매개변수 전달(call-by-reference parameters) 공유에 의한 배정(assignment by sharing) class ArrTest { public static void main(String[] args) { int[] x = { 1, 2, 3}; int[] y = x; x[0] = 42; System.out.println( y[0] ); } // int[] y = (int[]) x.clone(); kkman@sangji.ac.kr

허상 참조(dangling references) 할당된 기억 장소 반환, 접근 경로(=포인터) 존재. 객체에 대해 환경에서 수명 종료, 접근 경로 존재 Dangerous ! 허상 참조를 만드는 요인 ? pointer assignment and explicit deallocation pointer assignment and implicit deallocation by block exit by function exit kkman@sangji.ac.kr

Example of Dangling References main(){ int *x, *y; x = (int *) malloc(sizeof(int)); *x = 1; y = x; /* *x and *y now aliases */ free(x); /* *y now a dangling reference */ printf("%d\n",*y); /* illegal reference */ return 0; } kkman@sangji.ac.kr

쓰레기(Garbage) Garbage (Dangling Objects) 쓰레기는 만드는 요인 ? 할당된 기억 장소는 존재하지만 접근 경로가 없음. 할당된 기억 장소가 너무 늦게 반환 메모리 낭비 발생, but 해롭지는 않음. 쓰레기는 만드는 요인 ? 명확한(explicit) 기억 장소 할당, 접근 경로 분실 Assignment deallocation of the access point kkman@sangji.ac.kr

An Example of Garbage main() { int *x; x = (int *) malloc(sizeof(int)); x = 1; /* OOPS! */ ... return 0; } kkman@sangji.ac.kr

Garbage Collection 언어 시스템 함수 언어, 객체지향 언어 automatically reclaims garbage. 함수 언어, 객체지향 언어 using garbage collectors. See you in Memory management section !! kkman@sangji.ac.kr