본문 바로가기

# Lang/C++

1.1 변수의 정의

 변수 (Variable)

프로그램에서 데이터를 저장하기 위해 사용되는 것.


데이터의 위치와, 해석방법, 식별자(변수명)의 조합이며.

이 정보들은 함께 묶여서 컴파일 타임에 심볼 테이블에 저장된다.






 데이터 위치

데이터를 저장하기 위해서는 사용되지 않는 RAM 공간에 데이터를 적재해야 한다.


성공적으로 적재했다면 해당 메모리의 위치를 기억해야 할 필요가 있는데,

데이터가 어디있는지 모른다면, 데이터를 잃어버린 것과 똑같기 때문이다.


C++은 심볼 테이블(Symbol Table)에 각 변수명과 메모리 위치, 자료형을 함께 적어놓는데.

변수에 접근할 때 마다, 심볼 테이블을 거쳐 메모리의 위치를 가져오게 된다. 


int data1;
double data2;





 데이터 해석방법

RAM은 모든 데이터를 이진수(비트열)로 저장하는데,

외부에서 보면 대충 이런 느낌이다.




위치를 알아도 크기해석방법을 모른다면 무엇을 의미하는지 알 수 없는데.

파일이름에 확장자가 없어서, 어떤 파일인지 알 수 없는 상황과 같다.


자료형은 마치 파일의 확장자처럼,

데이터의 크기와 비트열의 해석방법을 제공한다.





 데이터 저장방식 (Byte Order)

1Byte(8bit)를 넘는 원시 데이터는 아키텍쳐마다 RAM에 저장되는 방식이 다르다.
  • 빅 에디안     : 1바이트씩 자르고 RAM에 정순으로 저장.
  • 리틀 에디안  : 1바이트씩 자르고 RAM에 역순으로 저장.

#include <iostream>
#include <cstdio>

int main() {
    // 메모리에 0x12345678을 대입한다.
    int32_t n = 0x12345678;


    // 시작점에서 1바이트씩 출력한다.
    char* c = (char*)(void*)&n;
    for(int i=0; i<sizeof(n); i++){
        printf("0x%2X " , c[i]);
    }

}
<실행결과>
0x12 0x34 0x56 0x78 (빅 에디안)
또는
0x78 0x56 0x34 0x12 (리틀 에디안)




 변수 식별자

변수를 구별해낼 수 있는 정보를 의미하며, 여기서는 변수이름과 같다.

식별자(변수명)를 사용하면 심볼 테이블에서 위치와 자료형을 얻어오고 해석결과와 연결시키는데,
이것이 해당 변수에 저장된 값을 가져오는 과정이다.

#include <iostream>

int main() {
    int32_t a;
    a = 12345;

    // a는 12345로 해석됨.
    std::cout << a << std::endl;
}
<실행결과>
12345




 생각해보기 (1) :  숫자로된 Hello, World!

C++에서 문자열은 아스키 코드를 이어붙이고, 마지막에 0을 집어넣은 것 이다.

아래 코드에서 알맞은 숫자를 넣어 "Hello, World!"를 만들어보자.


어떤 에디안을 사용하는지에 따라 정답이 다르다.


#include <iostream>

int main() {
    // "Hello, World!" 문자열을 만들어보자.
    int64_t number[2];
    number[0] = ?;
    number[1] = ?;

    // 문자열로 캐스팅한 뒤,  콘솔에 출력한다.
    auto* word = (const char*)(void*)number;
    std::cout << word << std::endl;
}

<실행결과>

Hello, World!




'# Lang > C++' 카테고리의 다른 글

2.2 자료형과 데이터 해석  (0) 2019.03.27
2.1 자료형  (0) 2019.03.26
1.3 변수와 메모리 모델  (0) 2019.03.23
1.2 변수의 생성  (0) 2019.03.21
모던 C++14(17) 학습목차  (0) 2019.03.20