Chapter 2. C++의 메모리 동적 할당
1. 메모리(Memory)
- 메모리
‧ 프로그램이 실행되는 동안 데이터가 저장되는 공간
‧ 운영체제에 의해 할당되는 메모리 공간
◦ 코드(Code) 영역 : 실행할 프로그램의 코드가 저장되는 공간으로 CPU는 코드영역에 저장된 명령문을 하나씩 꺼내 실행한다.
◦ 데이터(Data) 영역 : 전역변수와 static변수가 할당되는 영역으로 프로그램 시작과 동시에 할당되어 종료 시까지 남아있는 특징의 변수가 저장되는 공간이다.
◦ 힙(Heap) 영역 : 프로그래머가 원하는 시점에 메모리 공간에 할당 및 소멸을 하기 위한 공간이다.
◦ 스택(stack) 영역 : 지역변수와 매개변수가 할당 되는 공간으로 함수를 빠져나가면 소멸되는 변수를 저장하는 공간이다.
- 메모리의 종류
‧ 정적 메모리
◦ 메모리가 언제 할당되고 해제 될지, 얼마나 할당될지 컴파일 시간에 결정되는 메모리
◦ 스택(stack) 영역과 데이터(Data) 영역에 할당되는 메모리
‧ 동적 메모리
◦ 메모리가 언제 할당되고 해제 될지, 얼마나 할당될지 실행 시간에 결정되는 메모리
◦ 힙(Heap) 영역에 할당되는 메모리
◦ C언어 에서는 melloc 함수와 free 함수를 이용하지만 C++에서는 조금 더 간편하고 간소화되어 함수가 아닌 연산자로 new 연산자와 delete 연산자를 사용한다.
‧ new 연산자
변수 동적 할당 |
배열 동적 할당 |
◦ C++에서는 동적 메모리를 할당하는 C언어에서의 malloc과 같은 기능을 하는 new라는 연산자가 새로 생겼다.
◦ 함수가 아닌 연산자로 malloc 함수보다 사용하기 간편하며 형 변환을 하지 않아도 된다.
◦ new 연산자를 이용해 생성자를 호출할 수 있다.
※ 생성자 : 생성자는 클래스로부터 객체가 생성될 때 초기화 과정을 수행하는 함수이다.
‧ delete 연산자
변수 동적 할당 해제 |
배열 동적 할당 해제 |
◦ C언어에서 free의 기능과 같은 역할을 하는 연산자이다.
◦ 함수가 아닌 연산자로 free 함수보다 사용하기 간편하다
◦ 대괄호([])의 위치가 바뀌면 컴파일에러가 발생한다.
‧ 문자열 동적 할당
◦ 문자열의 길이가 일정하지 않은 데이터를 여러 개 저장할 때 사용하며 이와 같은 많은 데이터를 처리할 때 메모리를 효율적으로 사용할 수 있다는 장점이 있다.
◦ 문자열의 길이가 일정하거나 저장 데이터의 개수가 적다면 배열을 사용하는 것이 간편하다.
2. 기억클래스
- 변수는 데이터형과 기억클래스를 가지고 있다.
- 데이터형(Data Type) : 변수의 크기와 어떤 타입의 데이터를 처리할 것인가를 결정한다.
- 기억클래스(Storage Class) : 변수가 메모리상에서 사용되는 유효범위와 초기화 방법을 결정한다.
- 변수는 기억클래스에 따라 지역변수, 전역변수, 정적변수로 나뉜다.
- 지역 변수
· 함수나 블록({}) 내에서 선언된 변수로 선언된 함수나 블록 내에서만 사용할 수 있다.
· 함수가 종료되면 메모리상에서 소멸된다.
· 매개변수도 지역변수에 포함된다.
· 초기화하지 않으면 쓰레기 값을 갖는다.
- 전역 변수
· 함수 외부에서 선언된 변수로 모든 함수에서 사용 할 수 있다.
· 프로그램의 시작과 동시에 메모리 공간에 할당되며 종료 시까지 존재한다.
· 별도의 값으로 초기화하지 않으면 0으로 초기화된다.
- 정적 변수
· static을 붙여 선언된 변수를 말하고 선언 위치에 따라 지역 변수 또는 전역 변수의 특징을 가질 수 있다.
· 정적 지역 변수 : 선언된 함수 안에서만 사용할 수 있다.
· 정적 전역 변수 : 프로그램 실행 시 메모리가 단 한번 할당되며 프로그램이 종료되면 메모리에서 소멸된다.
'C++' 카테고리의 다른 글
Chapter 6. C++의 또 다른 기능 (0) | 2015.08.05 |
---|---|
Chapter 5. 연산자 오버로딩(Operator Overloading) (0) | 2015.08.05 |
Chapter 4. 상속(Inheritance) (0) | 2015.08.05 |
Chapter 3. 객체지향 프로그래밍(Object Oriented Programming) (0) | 2015.08.05 |
Chapter 1. C++의 개요 (0) | 2015.08.05 |