메모리 영역
C++의 메모리 영역 : 스택영역, 데이터영역, 힙영역, 코드영역
스택영역 : 함수의 인자 혹은 함수의 내부에서 선언된 변수들의 메모리가 할당되는 영역이다.
함수의 내부에서 선언된 변수를 지역변수라고 한다.
지역변수들이 선언되는 메모리 공간이 스택영역이다.
함수의 인자는 매개변수라고 한다.
데이터영역 : 전역변수, 정적(static)변수들의 메모리가 할당되는 영역이다.
힙영역 : 동적할당된 메모리가 할당되는 영역이다.
필요할 때 공간을 할당하고, 원할 때 메모리를 제거할 수 있다.
※ 동적할당시 문제가 생길 수 있는 부분으로 메모리 단편화가 있다.
코드영역 : 작성한 코드를 컴파일러가 바이너리코드(0, 1 로 구성된 코드)로 만들어주고,
이 바이너리 코드를 이용해서 실행파일을 만들어 준다.
실행파일을 더블클릭해서 실행을 하게 되면 해당 프로그램이 동작되는데,
이때 실행파일을 구성하는 바이너리 코드가 메모리에 저장되게 된다.
이렇게 코드가 저장되는 영역을 코드영역이라고 한다.
함수 포인터
함수포인터 : 함수도 메모리주소가 존재한다.
바이너리코드가 코드영역에 올라가게 되면 코드를 구성하고 있는 각 함수들도 메모리에 저장이 되기 때문에
주소를 가질 수 있기 때문이다.
실제 우리가 함수를 호출을 한다는 의미는 '해당 메모리 주소로 이동하여 코드를 동작시키라는 의미'가 된다.
그렇다면 함수의 주소를 알 수 있어야 하는데, 함수의 이름이 곧 해당 함수의 메모리 주소이다.
함수의 포인터 타입은 반환타입, 인자에 영향을 받는다.
Test나 TestStatic은 void 반환타입에 인자가 없다.
그러므로, 반환타입(*포인터명)(인자타입); 의 형태로 함수 포인터 변수를 선언할 수 있다.
'C++ 문법' 카테고리의 다른 글
문자열 관련 함수 1 (strcpy_s, strlen함수, strcat_s) (0) | 2022.04.12 |
---|---|
#define, 재귀함수, 꼬리재귀함수 (0) | 2022.04.12 |
디폴트 인자, 정적 변수 (0) | 2022.04.11 |
전역변수, 함수의 오버로딩 (0) | 2022.04.11 |
함수 (0) | 2022.04.11 |