[ Const 와 메모리 구조 ]
어떤 프로그램이 빌드가 되서 실행 파일이 만들어진 다음에 실행파일을 실행할때 메모리에 이 실행파일을 올리는데
아래와 같은 구조로 올려진다.

데이터 영역은
.data ( 초기값이 있는 경우 )
// int a = 2;
.bss ( 초기값 없는 경우)
// int b;
.rodata ( 읽기 전용 데이터 )
// const char* msg = "Hello World";
궁금한건 const 로 설정한 값은 어디 메모리에 올려지는가? 읽기 전용 데이터인가?
사실 C++ 표준에서 꼭 그렇게 하라는 말이 없다.
그냥 컴파일러 하기 나름이다 ( VS 마음 )
수업시간에 ctrl alt D 해서 디 어셈블리로 봤을때는
컴파일러가 const 값을 아무런 메모리에도 올리지 않고
컴파일러가 자체적으로 a 를 3으로 바꾸는걸 알 수 있었다.
const int a = 3;
반면에,
내가 직접 해봤을때, a 의 메모리 주소에 가서 값을 보니

아래와 같이 리틀 엔디안 방식으로 3 이 잡혀있는걸 확인 할 수 있었다.
이때는 .rodata ( 읽기 전용 데이터) 메모리에 잡힌것이다.

cf ) 함수 안에 변수를 선언하면 stack 메모리 영역에 올라간다. const 도 마찬가지이다.
[ 스택 프레임 ]
스택 프레임 강의 다시 보기 ( 레지스터랑 메모리 랑 스택 포인터 ) 연관해서 가리켜 준다.
[ 지역 변수와 값 전달 ]


[ 호출 스택 ]
호출 스택을 잘 활용해라!! 중요하다
[ 함수 마무리 ]
오버로딩 : 함수 이름을 재 사용할 수 있다. ( 매개변수 갯수, 타입, 순서를 통해 )
- 반환형식으로만 구분 할 수는 없다. ( 결국에는 반환은 호출한 후에 반환되는건데 호출 할 때 구분 할 수 없으니 컴파일러 입장에서는 안된다. )
함수 파라미터에 디폴트 값을 정해주려는 해당 파라미터는 항상 파라미터 끝에 위치해야한다.
void Add(int num1 , int num2 , int num3 =3 ) // 항상 끝에만 가능하다 { ~~ }
* 여러 파라미터에 디폴트 값을 두어도 된다. ( 다만 모두 뒤에 있어야한다. )
'C++과 언리얼로 만드는 게임 개발 > Part1. C++ 문법' 카테고리의 다른 글
Day5 ( 47.32% ) (0) | 2022.03.28 |
---|---|
Day4 ( 42.85% ) (0) | 2022.03.25 |
Day3 ( 37.50% ) (0) | 2022.03.24 |
Day1 ( 16.96% ) (0) | 2022.03.24 |
인프런 [C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] 강의 Part1 시작 (0) | 2022.03.24 |