바인딩 ( Binding )



일반적으로 속성과 개체 사이 또는 연산과 기호 사이와 같은 연관 ( Association ) 

변수에 변수와 관련된 속성을 연관시키는 것
값들이 확정이 되어 구속(Bind) 된 상태 

함수 호출된 부분에서 함수가 위치한 메모리 번지를 연결

 




 바인딩 타임 ( Binding Time )



프로그램에서 변수들이 갖는 속성이나 값이 완전히 결정되는 시간.
이름에 속성이 연결되는 시간

 




 바인딩 타임의 종류 ( Variety of Binding Time )



1. 언어 정의 시간 ( Language Definition Time ) 

언어에서 허용되는 대부분의 자료구조나 프로그램 구조 등을 확정.
ex) int를 정수형으로 나타낸다고 정의

2. 언어 구현 시간 ( Language Implementation Time ) 

언어를 정의할 때 이루어 지는 형태(표현 자리 수, 범위, 크기 등이 정해짐)
렉싱 ( Lexing ) : 키워드를 문법대로 자르는 것

ex) int a 를 4바이트로 결정, int, char 등 사전에 정의된 키워드를 렉싱

3. 컴파일 시간 ( Compile Time )

원시프로그램 을 번역할 때 이루어지며 . Data, Stack 등 메모리에 들어갈 변수가 정해짐.
정적바인딩, 변수의 이름 또는 형과 프로그램 문장 구조

고레벨 언어를 Binary File , Obj 파일로 전환 

작동) Obj 파일로 변환하는 과정에서 코드가 문법에 맞는지 검사 (Parsing)


4. 링크 시간 ( Link Time )

프로그램을 라이브러리와 링크할 때 이루어 지는 형태

사용 가능성을 조사하고, 라이브러리와 모듈을 합친다.


5. 적재 시간 ( Load Time )

변수를 메모리 로 적재할 때 (주소가 결정됨)

운영 체제에서 메모리로 프로그램을 불러와 실행


6. 실행 시간 ( Run Time )

프로그램을 실행 할 때 이루어지며 변수의 값을 확정

변수의 기억장소 할당
실행 부터 종료 까지 변수 값을 바인딩

 




 정적 바인딩 ( Static Binding )



실행 시간 전에 일어나고, 실행 중에 변하지 않는 상태로 유지되는 바인딩

ex) int a; // 정수 타입(Integer Type)을 이름 'a'에 정적으로 바인딩

 




 동적 바인딩 ( Dynamic Binding )



실행 시간 ( Run-Time ) 중에 일어나거나 프로그램 실행 과정에서 변경되는 것

(정적 바인딩한 변수들도 실행 중에 변경 되면 동적 바인딩이다)

ex) int * ptr = malloc( sizeof(int) * 10 ); 

 




 할당 ( Allocation )



기억장소 할당 : 변수에 메모리 공간을 바인딩( Binding )하는 과정

 




 정적 할당 ( Static Allocation )



메모리 에 적재될 크기를 미리 아는 것

Run-Time 에 각 타입에 맞는 메모리 영역 ( Segment ) 에 할당

 



 동적 할당 ( Dynamic Allocation )



외부환경에 의해 변화하여 크기를 미리 알 수 없는 것

명시적인 명령어에 의해 실행되는 할당

동적할당이 공간은 힙영역( Heap Segment )

포인터나 참조 변수를 통해 접근이 가능

 




 바인딩, 바인딩의 종류, 할당에 대해 알아보았다

 바인딩은 변수의 값이 실제 값과 묶이는 것이며 묶인 속성과 값이 완전히 결정되는 시간이 바인딩 타임이다.

 할당에는 정적할당과 동적할당이 있다.

출처 : http://wookss-blog.tistory.com/6 / http://people.cs.clemson.edu/~turner/courses/cs428/summer00/webct/content/pz/ch2/ch2_5.html


'프로그래밍 > 프로그래밍 기초' 카테고리의 다른 글

메모리 구조  (0) 2016.03.23
메모리 관리기법  (0) 2016.03.21

메모리 구조

  • CODE(TEXT) SEGMENT
  • HEAP SEGMENT ( L -> H )
  • FREE SEGMENT
  • STACK SEGMENT (H->L) 후입선출
  • DATA SEGMENT ( L -> H )

- Initialized Data Segment

- BSS(Block Started by Symbol)

(전역(extern), 정적변수 0으로 자동 초기화)

위와 같은 변수들은 초기화를 안할 경우에 문제가 생길 수 있기 때문에 존재한다.

High Address

Low Address

 

코드(텍스트) 영역 ( Code(Text) Segment )

  • 코드 자체를 구성하는 메모리 영역

 

  • Hex 파일이나 Bin 파일 메모리

 

  • 프로그램 명령이 위치하는 곳으로 기계어로 제어되는 메모리 영역

 

  • " 문자열 상수를 제외한 지역변수에 할당 "되는 리터럴 상수가 기계어로 저장

 

  • 알고가자!!!
    문자열 상수( "홍길동" ) => Data Seg\Rom 영역
    선언된 지역에 따라 메모리 영역이 다르다.

 

데이터 영역 ( Data Segment )

  • 전역변수와 정적(static) 변수 중 초기화가 할당된 변수가 저장되는 영역

 

  • 변수는 RAM에 저장( Read & Write )

 

  • 변수에 대입하는 초기값은 ROM에 저장

 

  • ROM에 저장된 변수 생성시 복사하여 변수에 할당

 

  • 할당하는 초기값 중 문자열 상수를 제외한 리터럴 상수는 컴파일러에 따라 코드영역에서 복사는 경우도 있다.

 

  • 데이터 영역 - BSS< Block Started by Symbol >
    전역변수 또는 정적 변수 중 초기값이 할당되지 않은 변수가 저장되는 영역

 

  • 메모리를 생성하지 않고 상징적인 변수의 이미지(상징)만 존재

 

  • 프로그램 시작 시 BSS에 저장된 변수들은 0으로 초기 값을 대입

 

  • Data영역으로 이동 / 메모리는 RAM에 할당. 즉, 상징적으로만 존재하는 영역

 

힙 영역 ( Heap Segment )

  • 런타임에 할당하는 동적 메모리가 위치하는 영역

 

  • 크기는 정형화 되어 있지 않고 유동적이고 Free 영역에 가변적으로 크기를 확장

 

  • 동적 할당한 메모리는 식별자(명칭)가 존재하지 않으므로 포인터 변수를 사용해서 접근가능

 

  • 메모리는 낮은 주소에 높은 주소로 할당

 

  • 메모리가 부족할 경우 할당이 실패하여 NULL을 반환

 

  • 런타임에 BSS와 HEAP 사이를 기준 으로 HEAP은 아래로 순차적으로 메모리를 사용한다

 

  • 포인터 변수는 각 지역의 특성에 영향을 받아 생성하고 참조하는 메모리가 HEAP에 존재

 

자유 영역 ( Free Segment )

  • 힙영역과 스택영역의 완충지 역할

 

  • 두 영역이 유동적 일 수 있는 것은 자유영역에 해당 영역의 크기 확장할 수 있다.

 

  • 스택 영역이 Free 영역을 침범해서 Heap 영역을 침범할 경우 StackOverFlow

 

  • 반대의 경우에 Heap 은 NULL 을 리턴

 

스택 영역 ( Stack Segment )

  • 프로그램이 실행 시 자동으로 사용하는 임시 메모리 영역

 

  • 크기는 정형화 되어 있지 않고 유동적이며 Free 영역에서 가변적으로 크기 확장이 가능

 

  • 기본적으로 약 1MB의 크기로 할당

 

  • 지역 변수, 매개 변수, 리턴 값 등 잠시 사용 후 사라지는 유형의 데이터가 저장 되는 영역

 

  • 메모리는 높은 주소에서 낮은 주소로 할당 되며 메모리 부족 시 StackOverFlow 발생

 

메모리 구조는 6가지로 구분된다.
CODE, DATA, BSS, HEAP, FREE, STACK

출처 :

'프로그래밍 > 프로그래밍 기초' 카테고리의 다른 글

바인딩과 바인딩 타임 그리고 할당  (0) 2016.04.21
메모리 관리기법  (0) 2016.03.21


가상 메모리 ( Virtual Memory )

  • 주기억 장치인 RAM 의 실제 물리적인 공간 외에 하드 디스크 (보조기억장치) 에 부족한 시스템 메모리를 보조해 주는 역할

  • 새로운 프로세스가 실행되어 실제 메모리의 공간이 부족하면 휴면상태인 프로세스를 임시 공간인 가상메모리로 보낸 후에 새로운 프로세스를 실행하게 된다.

  • 실제 메모리와 가상 메모리 사이로 데이터를 옮기는 과정이 추가 되어 시스템이 느려지는 원인이 될 수 있습니다. 이유는 램에 비해 디스크의 속도면에서 차이가 나기 때문이다

  • 그렇기 때문에 가상 메모리는 되도록 사용 안하는 것이 좋다. 그만큼 실제 메모리 (RAM) 의 용량이 충분해야 할 필요가 있을 것이다. 일부의 프로그램에서 메모리 공간이 부족하지 않더라도 가상 메모리를 사용하는 경우도 있으니 참고하기 바랍니다.

  • 가상 메모리 관리
  1. 가장 빠른 디스크에 설정하는 것이 좋다.
    SSD에 윈도우와 가상 메모리가 위치해 있는 경우 분리를 위해 HDD로 옮기게 되면 엑세스 부하를 줄여 얻는 이득에 비해 엑세스 속도 저하로 인한 손해가 큽니다.

  2. 램 용량이 충분하면 가상메모리는 아예 없애는 것이 좋다.
    일부 소수의 프로그램들이 가상메모리를 사용하는 경우가 있기 때문에 최소한으로만 설정하여 사용하는 것이 좋다.

  3. 가상 메모리는 고정된 크기로 설정하는 것이 좋다.
    자동의 경우에는 계속해서 늘어나는 경우도 생길 것이고 잘못된 고정값을 설정하게 되면 부족한 현상이 발생될 수 있습니다. 따라서 자신에 사용에 맞게 설정하는 것이 가장 좋습니다.

  4. 나에게 적당한 가상 메모리 용량은 얼마일까?
    가상 메모리 크기를 64비트 기준으로 최소값인 16MB로 설정 후 최대 크기는 여유 있게 지정합니다. 그 이후에 재부팅 후 변화를 적용하고 평상시 사용하는 프로그램들을 실행해 봅니다.
    가상 메모리 설정 창에서 확인하면 사용한 만큼 늘어나 있을 것이고 그렇지 않다면 RAM의 용량이 충분하다는 것입니다. 평균적인 가상 메모리 크기를 알아낸 뒤에는 1.2~1.5배의 여유를 둔 가상 메모리를 설정합니다.

  5. 가상 메모리는 사용되지 않을 수록 좋다
    주기억장치에 비해 보조기억장치의 속도는 전투기와 거북이 수준으로 차이가 납니다.
    따라서 램 용량은 자신의 현재 원하는 작업 수준 보다 한단계 높은 수준으로 셋팅 해주는 것이 좋습니다. 그래야 가상 메모리 사용을 줄이거나 없앨 수 있기 때문입니다.


페이징 ( Paging )

  • 내용








세그먼테이션 ( Segmentation )

  • 내용








제목

  • 내용







내부 단편화

  • 내용








외부 단편화

  • 내용








결론

내용

내용

출처 : 



'프로그래밍 > 프로그래밍 기초' 카테고리의 다른 글

바인딩과 바인딩 타임 그리고 할당  (0) 2016.04.21
메모리 구조  (0) 2016.03.23

+ Recent posts