[C++] const, 메모리 구조
const, 메모리 구조
인프런 Rookiss님의 'Part1: C++ 프로그래밍 입문' 강의를 기반으로 정리한 필기입니다.
😎[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part1: C++ 프로그래밍 입문 강의 들으러 가기!
Const
Const란?
- 한번 정해지면 절대 바뀌지 않을 값들
- constant의 약자인 const를 붙임 (변수를 상수화 한다고 함)
- const를 붙였으면 초기값을 반드시 지정해야 함
Const 특징
- 그러면 const도 바뀌지 않는 읽기 전용
- .rodata에 들어가는가?
- 사실 C++ 표준에서 꼭 그렇게 하라는 말이 없음
- 컴파일러(ex. Visual Studio)에 따라 다르다.
데이터 영역
.rodata section
https://hackmd.io/@xl86305955/rv32i_lucas_number
https://velog.io/@starkshn/const%EC%99%80-%EB%A9%94%EB%AA%A8%EB%A6%AC-%EA%B5%AC%EC%A1%B0
data (초기값 있는 경우)
- int a = 2;
bss (초기값 없는 경우)
- int b;
.rodata (읽기 전용 데이터)
- const char* msg = "Hello World";
코드
더보기
#include <iostream>
using namespace std;
unsigned char flag; // 부호를 없애야 >> 를 하더라도 부호비트가 딸려오지 않음
const int AIR = 0; //바뀌지 않는 값은 대문자로 작성하는 Code Convention이 있음
const int STUN = 1;
const int POLYMORPH = 2;
const int INVINCIBLE = 3;
// 전역 변수
// [데이터 영역]
// data (초기값 있는 경우)
int a = 2;
// .bss (초기값 없는 경우)
int b;
// .rodata (읽기 전용 데이터)
const char* msg = "Hello World";
int main()
{
// [스택 영역]
int c = 3;
#pragma region const
// 0b0000 [무적][변이][스턴][공중부양]
// 무적 상태로 만든다.
flag = (1 << INVINCIBLE); //값 8
// 변이 상태를 추가한다 (무적 + 변이)
flag |= (1 << POLYMORPH); //값 4
// 무적인지 확인하고 싶다? (다른 상태는 관심 없음)
// bitmask
bool invincible = ((flag & (1 << INVINCIBLE)) != 0);
// 무적이거나 스턴 상태인지 확인하고 싶다면?
// bool mask = (1 << 3 | (1 << 1); 다른방식의 코딩 예시
bool stunOrInvincible = ((flag & 0b1010) != 0);
#pragma endregion
}
'⭐ Programming > C++' 카테고리의 다른 글
[C++] if, if-else, else, switch 분기문 (0) | 2022.03.20 |
---|---|
[C++] 변수의 유효범위, 연산 우선순위, 타입 변환, 사칙연산 주의사항 (0) | 2022.03.20 |
[C++] 비트 연산과 비트 플래그, 비트 시프 (0) | 2022.03.19 |
[C++] 비교 연산과 논리 연산 (0) | 2022.03.19 |
[C++] 산술연산 (0) | 2022.03.19 |
댓글
이 글 공유하기
다른 글
-
[C++] if, if-else, else, switch 분기문
[C++] if, if-else, else, switch 분기문
2022.03.20 -
[C++] 변수의 유효범위, 연산 우선순위, 타입 변환, 사칙연산 주의사항
[C++] 변수의 유효범위, 연산 우선순위, 타입 변환, 사칙연산 주의사항
2022.03.20 -
[C++] 비트 연산과 비트 플래그, 비트 시프
[C++] 비트 연산과 비트 플래그, 비트 시프
2022.03.19 -
[C++] 비교 연산과 논리 연산
[C++] 비교 연산과 논리 연산
2022.03.19