본문 바로가기

카테고리 없음

[02] 불친절한 Variable

불친절한 C++ 노트는 작성자가 C++을 복습한 내용을 적은 것이며,
운영체제(리눅스)나 컴퓨터 구조와 같은 저수준의 관점에서 C++을 바라본다.

Variable

변수(Variable)란 값을 저장할 수 있는 공간이라고 할 수 있지만,

정확히는 다음 정보들의 조합입니다.

  • 메모리 식별자 (= 메모리 주소)

  • 타입 식별자 (= 자료형)

  • 변수 식별자 (= 변수 이름)


아래 사진은 변수가 어떻게 메모리 위에 저장되어 있는지를 나타냅니다.


{Content, Value}는 {Address, Type}을 통해 알 수 있으므로,

실제로 필요한 정보는 {Address, Type, Name} 임에 주목하기 바랍니다.



Memory Identifier (Memory Address)

메모리 식별자는 데이터가 어디에 저장되어 있는지 가르킵니다.

보통 메모리 주소를 통해 나타내며, 변수 이름에 오퍼랜드(&)를 붙이면 얻을 수 있습니다.


하지만 메모리 식별자만 가지고 값을 알아낼 수 없습니다.

void형 포인터를 주고, 값이 무엇인지 알아내란 말과 똑같기 때문이죠.


데이터가 어떤 방식(포맷)으로 저장되어 있는지가 필요한데,

이것을 제공하는 것이 데이터 타입 식별자(=자료형, Data Type)입니다.



Data Type Identifier (Data Type)

자료형 식별자는 데이터를 해석하고 사용하는 방법을 가르킵니다.


데이터의 구조/운용법을 알려주는 자료형 지정자와,

데이터의 동작/사용법을 제한하는 자료형 제한자가 조합되어 만들어지죠.


  



  • 자료형 지정자 (Data Type Specifier)
데이터를 어떻게 해석하고 사용해야 하는지 정의하며,
프로그래머가 의도한 데이터의 특성을 컴파일러에게 알려줍니다.
  1. 데이터 해석 방법 (및 데이터 포맷)
  2. 데이터 사용 방법 (및 관련 연산자)
  3. 데이터 생성/소멸 과정

* note

어떤 자료형이든 void 타입으로 안전하게 변환될 수 있습니다.

이 특성 때문에 void 타입은 generic type 으로 불립니다.



  • 자료형 제한자 (Data Type Qualifier)
자료형 지정자를 수식하여 그 동작을 제한합니다.
  1. const
  2. volatile
  3. restrict
  4. _Atomic (since C11)


#사례연구(1) : 변수의 식별자 정보 알아내기

  • 메모리 식별자 알아내기



  • 변수 식별자 이름 알아내기


  • 자료형 식별자 알아내기 (1)

* note

i 는 필자의 컴퓨터가 사용하는 int 자료형의 아이디를 나타낸다.

각 컴퓨터마다 다를 수 있다.



  • 자료형 식별자 알아내기 (2)



#사례연구(2) : long long을 string으로 해석하기