https://rokaisback.tistory.com/14
이거 공부하다가 static과 전역변수의 다른 점을 인지할 수 있었다.
정적 변수 : 선언,초기화 한 스코프 내에서만 사용 가능.
전역 변수: cpp 에 초기화 하고, h에서 extern을 통해 다른 파일에도 존재를 알리고 사용할 수 있다.
Data 영역과 BSS영역
수식이나 함수에 의해 초기화 된 경우 BSS 영역으로 간다는 것은 중요할 수 있다.
왜냐하면 실행파일의 크기가 달라지기 때문이다.
Static 은 본문에서 사용하지 않으면 메모리에 잡히지 않는다.
우리는 초기화 하지 않은 a2와 b2의 주소가 0a1d400 번대 라는 것을 통해 이 부분이 Bss 영역이라는 것을 유추할 수 있다.
Dynamic Initializer (동적 초기화)
함수를 이용한 초기화
a3는 시작과 동시에 초기화를 했지만 함수를 이용한 초기화이므로 Bss 영역에 올라가는 것을 볼 수 있다.
컴파일 시점에 함수의 리턴 값을 알아 낼 수 없기 때문이라고 한다.
수식을 이용한 초기화
Bss 영역에 잡히는 것을 볼 수 있다.
Constexpr
컴파일 시간 상수를 만드는 키워드이다.
상수는
1.컴파일 시간에 알 수 있는 상수(compile_time constant)
2.컴파일 시간에 알 수 없는 상수 (run_time constant)
const는 1과 2 모두 사용 가능.
constexpr는 1번만 가능.
constexpr 함수
컴파일 타임에 계산해서 상수를 리턴해주는 함수를 만들 수 있다.
함수에 constexpr를 붙이니 메모리를 보면 b2와 a3가 Data 영역에 잡힌 것을 볼 수 있다.
아래의 조건만 피하면 오류가 발생하지 않는다.
https://shinluckyarchive.tistory.com/159
'자문자답 공부' 카테고리의 다른 글
테셀레이션,지오메트리,한 정점에 다수의 UV 처리. (0) | 2024.05.09 |
---|---|
Malloc , New 차이 (0) | 2024.03.10 |
포인터 / 배열 (0) | 2024.02.26 |
Struct와 Class 의 차이 (0) | 2024.02.23 |
Virtual 키워드 (0) | 2024.02.21 |
댓글