본문 바로가기

assortrock

c++ 4일차

함수(function)

(cpu가 처리해야 할 명령서 라고 이해)

특별한 목적의 작업을 수행하기 위해 '독립적'으로 설계된 코드의 집합

 

선언

반환자료형 함수명 (매개변수 목록)
{
	함수 몸체( 명령문의 집합 )
}

반환 타입(return type) : 함수가 모든 작업을 마치고 반환하는 데이터 타입 명시

매개변수 목록(parameters) : 함수 호출 시에 전달되는 인수의 값을 저장할 변수들을 명시

함수는 해당 함수를 사용하기 전에 미리 존재 해야한다.

 

원형 선언

c++ 에서 mai( ) 함수가 가장 먼저 컴파일된다. 함수가 main 보다 후에 선언된 경우 컴파일러에 함수가 나중에 정의 되어 있다고 알려줘야 하며 그 역할을 함수의 원형 선언이 한다.

반환타입 함수명(매개변수목록);

 

재귀함수(recersive function)

함수 안에 자기자신을 재호출하는 것

계층 구조를 탐색, 순회 할 때 직관적으로 구현이 가능(쉽다)

종료 조건을 설정해야 한다. -> 종료 조건이 없다면 스택 오버 플로우 발생위험이 있다.

for 문보다 성능이 덜하다 (for 보다 느리다)

한번 함수를 호출할 때마다 스택에 개별 메모리를 사용해야 한다. ( 마지막 함수에서 호출을 종료하기 전에 메모리를 그대로 점유하므로 비효울적이다.)

 

꼬리 재귀(tail recursion)

재귀함수에 컴파일러의 for 문 방식으로 변경해주는 도움을 받음

 

 

메모리 구조

낮은 주소(low memory)



런타임에 크기가 결정됨

런타임에 크기가 결정됨

높은 주소(high memory)
메모리  
실행할 프로그램의 코드 코드영역
정적변수 / 전역변수 데이터 영역
사용자의 동적할당 힙영역 ↓
지역변수 /매개변수 스택영역 ↑

code 영역

실행할 프로그램의 코드가 저장되는 영역.

cpu는 코드 영역에 저장된 명령어를 하나씩 가져가서 처리한다.

 

data 영역

프로그램의 전역변수와 정적(static)변수가 저장되는 영역.

프로그램의 시작과 함께 할당되며, 프로그램이 종료되면 소멸한다.

 

stack 영역

지역변수와 매개변수가 저장되는 영역

함수의 호출과 함께 할당되며, 함수의 호출이 완료되면 소멸한다.

스택 영역에 저장되는 함수의 호출정보를 스택 프레임(stack frame)이라고 한다.

함수가 호출되면 스택에는 '함수의 매개변수', 호출이 끝난 뒤 돌아갈 '반환 주소값', 함수에서 선언도니 '지역변수' 등이 저장.

stack 은 후입선출(LIFO, Last-In First-Out)방식이다.

이때 push 동작으로 데이터를 저장하고 , pop(팝) 동작으로 데이터를 인출한다.

stack overflow : 스택의 모든 공간을 다 차지하고 난 후 더 이상의 여유 공간이 없을 때 또 스택프레임을 저장하게 되면, 해당 데이터는 스택 영역을 넘어가서 저장되게 되고 이것을 스택 오버플로우라고 한다.( 데이터가 스택 영역을 넘어가도 저장될 수 있으면, 해당 프로그램은 오작동 하거나 보안상 위험하다.)

스택 영역은 메모리의 높은 주소에서 낮은 주소의 방향으로 할당된다.

 

heap 영역

사용자가 직접 관리할 수 있는 메모리 영역.(사용자에 의해 메모리 공간이 동적으로 할당 되고 해제된다.)

메모리의 낮은 주소에서 높은 주소의 방향으로 할당된다.

dynamic allocation( 메모리 동적 할당 ) : 런타임에 메모리를 할당받는 것

 

* data 영역과 stack 영역에 할당되는 메모리의 크기는 컴파일 타임(compile time)에 미리 결정된다. 하지만 heap 영역의 크기는 프로그램 실행 도중인 런타임(run time) 에 사용자가 직접 결정

'assortrock' 카테고리의 다른 글

c++ 6일차  (0) 2022.05.18
c++ 5일차  (1) 2022.05.15
c++ 3일차  (0) 2022.05.12
c++ 2일차  (0) 2022.05.11
c++ 1일차  (1) 2022.05.11