c언어 포인터의 기본 개념 이해하기 2

2020/06/12 - [programming/C Programming] - c언어 포인터의 기본 개념 이해하기 1

 

c언어 포인터의 기본 개념 이해하기 1

앞으로 "C언어의 꽃" 포인터에 대해서 공부해보는 시간을 가져보겠습니다. 포인터에 대해서는 조금씩 조금씩 쪼개서 살펴보도록 하겠습니다. 포인터(Pointer)란? C언어에서의 포인터는 메모리의 ��

swpfun.tistory.com

"포인터의 기본 개념 이해하기1"에 이어서 이번에는 "포인터의 기본 개념 이해하기2"를 공부해보겠습니다. 개념 이해하기1 에서는 포인터가 무엇인지? 어떻게 사용하는지에 대해서 공부했는데요. 이번에는 자료형에 따른 포인터의 크기에 대해서 공부해보겠습니다. 

 

자료형에 따른 포인터의 크기! 

c언어의 포인터의 자료형의 크기는 char, short, int 자료형에 상관없이 모두 4바이트로 동일한 결과를 반환받습니다. 여기서 알 수 있는 건 포인터의 자료형의 크기는 정수형 char, short, int, long과 실수형 float, double 모두 상관없이 동일한 크기의 메모리를 할당한다 라는 것입니다.!

운영체제에 따른 포인터 자료형의 크기! 
32비트 컴파일러 = 포인터 자료형 크기 4byte
63비트 컴파일러 = 포인터 자료형 크기 8byte

포인터 자료형의 크기는 동일하지만 항상 4byte의 메모리를 할당받는 것은 아닙니다. "포인터의 기본 개념 이해하기1"에서 포인터는 가리키는 것이라는 걸로 공부했습니다. 말 그대로 주소값을 저장할 수 있는 공간을 확보하면 되는 공간이라는 것입니다. 

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

void main(void) {

	printf("void *포인터의 크기 = %d\n", sizeof(void *));
	printf("char *포인터의 크기 = %d\n", sizeof(char*));
	printf("short *포인터의 크기 = %d\n", sizeof(short *));
	printf("int의 *포인터 크기 = %d\n", sizeof(int *));
	printf("long의 *포인터 크기 = %d\n", sizeof(long *));
	printf("float의 *포인터 크기 = %d\n", sizeof(float *));
	printf("double의 *포인터 크기 = %d\n", sizeof(double *));
}

 

자!! 그러면 왜 그러한지 살펴보도록 하겠습니다! 

 

자료형 char의 할당 메모리는 1byte 라고 공부했습니다!. 1byte = 8bit로 표현이 가능한 숫자는 0 ~ 255까지 표현이 가능합니다.  운영체제 또한 똑같습니다. 만약 8bit짜리의 운영체제가 있다면 8bit의 주소를 저장하기 위한 공간만 있으면 되는 것입니다. 만약 8bit의 운영체제의 포인터 자료형의 크기는 = 1byte만 있어도 모든 주소를 표현할 수 있기 때문에 포인터 자료형의 크기는 1byte로 고정이 되어있었을 것입니다. 

그럼 32bit는 4,294,967,295의 표현이 가능합니다. 다르게 생각하면 32bit의 주소는 0~ 4,294,967,295까지의 주소를 가진다는 것입니다. 32bit의 주소를 저장하기 적합한 메모리의 크기는 그럼 얼마일까? 8bit = 1byte이기 때무넹 32bit는 4byte가 됩니다.

 

1byte로는 32bit 운영체제의 주소를 담기에는 너무나도 부족한 크기이고 8byte는 32bit의 주소를 저장하기에는 너무나도 메모리의 손실이 크기때문에 32bit의 주소를 저장하고 사용할 수 있는 크기인 4byte의 메모리를 할당받게 되는 것입니다.! 

 

64bit의 운영체제 에서는 8byte의 메모리 할당으로 모든 주소를 처리할 수 있기 때문에 64bit의 운영체제에서의 포인터 자료형은 8byte크기로 할당받게 되는 것 입니다.

댓글

Designed by JB FACTORY