우리가 보통 'int num=10' 이라는 변수를 선언하면 메모리 상에는 4바이트(int형이니깐)짜리 메모리 할당이 이루어지게 됩니다.
메모리구조에 대해서는 나중에 설명하겠지만 일단 필요한 부분만 설명하겠습니다.
저희가 사용하고 있는 일반적인 PC의 메모리는 32비트 기준
0x00000000~0xFFFFFFFF까지 있습니다. (메모리는 16진수로 나타내며 10진수로 표현하면 4,294,967,296바이트를
사용할 수 있는 것입니다. )
-------------------------------------------------------------------------------------------------------------------------------------
잡소리를 좀 하자면 ㅎㅎ
Windows에서 32bit는 2의 32승까지의 메모리가 사용가능하며 64bit는 2의64승까지 사용이 가능합니다.
따라서 32bit는 최대 4GB, 64bit는 최대 192GB까지 사용가능하다고 나옵니다.(Microsoft 홈페이지 설명 기준)
즉 운영체제에 소프트웨어 적인 기술에 따라 최대 지원하는 RAM의 사용량이 달라진다는 것입니다.
-------------------------------------------------------------------------------------------------------------------------------------
메모리는 크개 4가지 영역으로 분류됩니다.
스택, 힙, 데이터영역, 코드영역
여기서 변수가 할당되는 메모리 영역은 스택입니다.
일반적으로 프로그래밍을 배울때 16진수로 써놓은 메모리 데이터값(0x00000000~0xFFFFFFFF)을 주소값 이라고 부릅니다.
실제 주소값을 확인해 보겠습니다.
void main() {
int num = 10;
printf("%p\n", &num);
}
이 문장을 실행하면
16진수로된 주소값이 나오게 됩니다.
즉, int num=10; 이라는 변수를 선언하면
0x010FF7F8이라는 곳에(주소에) 10이라는 값이 들어가 있는 겁니다.
주소값의 결정은 코드가 컴파일러에 의해 컴파일이 되면 그 후 링킹 과정에서 결정되게 됩니다.
---------------------------------------------------------------------------------------------------------------------------------------
이해가 안가시는 분들은 여기를 읽으시고 이해가 된 분들은 넘어가시길 바랍니다.
int num=21704;을 선언하면
주소 : 0x010FF7F8
4바이트 메모리영역에 21704이라는 데이터가 들어가게 됩니다.
하지만 프로그래머 입장에서 저 10이들어있는 주소값 0x010FF7F8을 외워서 코드에 넣는것에는 아무래도 무리가 있습니다.
따라서 변수라는 것을 도입해 "0x010FF7F8이라는 곳을 num이라는 이름의 변수로 표현하기로 하자(가르키기로 하자)로 정의한 것입니다.
풀어쓰자면 num이라는 변수는 주소값 0x010FF7F8이라는 곳을 표현(가르키고)하고 있으며
그 주소값이 있는 메모리에는 21704이라는 값이 들어있는 것입니다.
(이거 읽고 더 햇갈리면 걍 넘어가세요!!)
----------------------------------------------------------------------------------------------------------------------------------------
여기까지가 포인터를 이해하기위한 첫 걸음 입니다.
프로그래머가 꿈이신 분들은 반드시 이해하고 넘어가시길 바랍니다.
자바같은 경우에는 포인터가 안쓰이지만(정확히는 접근을 못하게 막아놨죠)
언어를 공부할 때 그 이해도 차이가 확실히 다름으로 반드시 집고 넘어갑시다.
혹시 이해안가는 부분 있으면 뎃글 남겨주세요. 읽고 부족한 부분 수정하겠습니다.
포인터의 설명과 사용법은 2부에서 계속됩니다.......
'프로그래밍 > C언어' 카테고리의 다른 글
C언어] 포인터(2) 사용법 (0) | 2019.01.19 |
---|
댓글