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
}