N Log

변수 (Variable)

들어가는 말

변수는 자료형, 변수명, 값으로 이루어져 있다.
변수명 **메모리 공간에 붙인 이름(식별자)**이다.
프로그래머는 복잡한 메모리 주소를 직접 다루는 대신, 변수명을 사용하여 메모리에 접근함으로써 데이터를 안전하고 편리하게 저장하거나 읽어올 수 있다.

변수 선언 및 대입

int a = 5;

변수를 선언한다는 것은 컴퓨터 메모리 상에 int형 데이터(주로 4바이트)를 담을 공간을 확보하고, 값 5를 저장한다는 뜻이다.
확보된 시작 주소가 0x1234FF00이라면, 이 변수는 0x1234FF00부터 0x1234FF03까지 총 4바이트의 연속된 공간을 차지한다.

변수의 값 사용

printf("%d", a);

변수 a를 읽는다는 것은, a가 가리키는 메모리 주소를 찾아가 그곳에 저장된 데이터를 읽어 온다.
이때 메모리를 어디부터까지 어디까지 읽을지는 자료형의 크기가 결정하는데 위의 예시에서는 시작 주소부터 4바이트만큼 읽어 온다.

주소를 직접 사용하지 않는 이유

*(int*)0x12345678 = 5; // 하드 코딩된 주소 접근

문법적으로는 가능하지만, 다음과 같은 이유로 변수를 사용한다.

  • ASLR(Address Space Layout Randomization) — 보안을 위해 OS가 실행 시마다 프로세스의 메모리 주소를 무작위로 배치하므로, 위 주소가 현재 프로세스의 메모리 영역이라는 보장이 없다.
  • 접근 권한 문제 — 다른 프로세스가 사용하는 메모리일 수 있다.
  • 가독성과 유지보수 — 0x12345678이라는 메모리 주소보다 age라는 이름이 데이터의 의미를 명확하게 나타낸다.