피씨컴의 기울어진 공관

3/5

프로그래밍/공부 2013. 3. 7. 12:56

● 배열 : 정적 메모리 할당

 

● 정적할당

1. 메모리 크기가 스택의 용량을 초과하는 경우 메모리 선언 자체를 할 수 없다.

2. 필요한 메모리의 크기가 일정하지 않을 경우

- 필요한 양보다 많이 선언한 경우 메모리 낭비

- 필요한 양보다 적게 선언한 경우 메모리 부족

 

● 동적메모리 할당

1. 포인터 변수로 할당된 변수를 관리한다.

2. 사용자가 할당한 메모리는 사용자가 소멸 시켜야 한다.

3. 소멸시키지 않을 경우 메모리 유실이 발생한다.

4. 동적 할당된 메모리는 힙 영역에 저장 된다.

단점 : 1. 포인터를 쓰기 때문에 안전하지 않다.

         2. 메모리누수 or 메모리 릭 암튼 이런거 조심해야함

 

장점 : 1.메모리를 유동적으로 쓸수있어서 효율적으로 쓸수 있음

   2.한번할당하면 배열처럼 쓸 수 있다.

 

- new

해당 자료형을 동적으로 할당한 뒤 포인터를 반환한다.

자료형 * p = new 자료형

new : 단일 할당

new [] : 배열 할당

 

- delete

해당메모리를 소멸한다.

 

 

● 언어별 할당or 헤제 의 모습

c : malloc 할당 / free 해제

c++ :  new 할당 / delete 해제

 

● 주의

-포인터 변수 관리 철저

 주소값이 유실되면 메모리도 유실 되는것과 같다

new, delete, new[],delete[]은 짝을 이루어 사용한다

서로 짝이 맞지 않을 경우 에러가 발생

동적할당이 항상 성공하는 것은 아니다.

실패할 경우가 있지만 거의 희박하다 (실패시 NULL을 리턴 or 끝주소)

연속된 메모리 할당에 약한가??

 

 

● 바인딩

변수나 데이터가 실제 메모리 주소를 할당받는것 "int a에서 4바이트의 메모리를 할당받고 "에 해당

정적 바인딩과, 동적 바인딩이 존재한다.

 

- 정적 바인딩(함수 호출문에 대한 주소가 컴파일시 이미 정해저 있는것)

프로그램 시작전에 미리 메모리에 할당 받는것 / 실행파일을 만들때 호출될 함수로 점프할 번지가 결정되어 바인딩 되는것

 

- 동적 바인딩(함수 호출문에 대한 주소가 실행중에 호출할 함수를 정하는것)

1. 이것은 가상함수 테이블을 이용한다.

2. 중요한것은 포인터(또는 레퍼런스)로 호출할때만 동작함

(이유는 포인터가 아니면 어떤 객체에 대한 함수인지 알수 있으므로 정적바인딩 된다.)

3. 실행파일을 만들때 바인딩 되지 않고 보류상태로 둠

4. 필요한 메모리 번지를 저장할 메모리를 4바이트씩 가지고 있다가 프로그램 실행시 결정

★ 단점

수행속도가 떨어지고 필요없는 메모리 공간 낭비

 

※ 단점이 있음에도 동적바인딩을 쓰는 이유 ?

상속해서 베이스 포인터로 접근할때

- 동적 바인딩을 사용하면 어떤 포인터에 의해 접근 되었는지에 상관없이 참조된 인스턴스의

   실제 클래스형에 따라, 재정의된 함수가 호출된다;.

 

 

 

 

 

 

바인딩 자료 출처 : http://blog.naver.com/yuc1206/50141743922

'프로그래밍 > 공부' 카테고리의 다른 글

3/8  (0) 2013.03.11
3/7  (0) 2013.03.11
3/4  (0) 2013.03.07
2 / 28  (0) 2013.03.07
2/27  (0) 2013.03.07
Posted by 피씨컴