5. 메모리

양준식·2020년 8월 8일
0
post-thumbnail

5-1. 메모리 주소

우리가 C로 작성한 변수들은 실제로 컴퓨터 메모리에 어떻게 저장될까요? 메모리 주소를 나타내는 방법과 그 주소를 알아내는 방법, 그 주소에 찾아가는 방법을 배워봅시다.

학습 목표

  • 16진법을 읽고 쓸 수 있습니다.
  • 메모리 주소에 접근하고 값을 받아오는 코드를 C로 작성할 수 있습니다.

핵심 단어

  • 16진법
  • 메모리 주소

5-1-1. 16진수(Hexadecimal)

  • 16진수: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, a, b, c, d, e, f
  • 2진수로 표현하면 길어지는 값을 16진수로 표현하면 훨씬 간결해진다.
  • 컴퓨터는 8개의 비트가 모인 바이트 단위(1 Byte = 8 Bits)로 표현한다. 2개의 16진수는 1byte의 2진수로 변환되기 때문에 정보를 표현하기 매우 유용하다.
    • 10진수 : 65
    • 2진수 : 0100 0001
    • 16진수 : 0x41

5-1-2. 메모리 주소

// 1. 기본
#include <stdio.h>

int main(void)
{
	int n = 50;
    printf("%i\n", n);
}

// 2. & 연산자 ("~의 주소")
#include <stdio.h>

int main(void)
{
	int n = 50;
    printf("%p\n", &n);
}

// 3. * 연산자 ("그 주소로 가줘")
#include <stdio.h>

int main(void)
{
	int n = 50;
    printf("%i\n", *&n);
}

5-2. 포인터

앞서 배운 메모리 주소를 직접 관리하기는 쉽지 않을 수 있습니다. C에는 포인터 라는 개념을 통해서 변수의 주소를 쉽게 저장하고 접근할 수 있게 해줍니다. 포인터가 무엇인지, 어떻게 사용하는지에 대해 배워보겠습니다.

학습 목표

  • 포인터 변수를 정의하고 사용할 수 있습니다.

핵심 단어

  • 포인터

5-2-1. 포인터

#include <stdio.h>

int main(void)
{
    int n = 50;
    int *p = &n;
    printf("%p\n", p); // 0x7fff3977662c >>> 메모리 주소가 출력됨
}

5-2-2. 포인터의 크기

  • 최신 컴퓨터는 64bits(8Bytes) 포인터를 사용 >>> long 타입과 같은 크기
  • 정수형(int)는 32bits(4Bytes)
  • 현대 하드웨어가 그렇게 생긴거지 꼭 이럴 필요는 없다.
profile
실력, 심력, 체력, 영력의 균형있는 성장을 추구합니다.

0개의 댓글