인프런 영문 브랜드 로고
인프런 영문 브랜드 로고

인프런 커뮤니티 질문&답변

윤지환님의 프로필 이미지
윤지환

작성한 질문수

독하게 시작하는 C 프로그래밍

포인터 변수 기본 문법

포인터 변수 크기 질문

해결된 질문

작성

·

32

0

안녕하세요.

포인터 변수 기본 문법 강의를 듣다가 강사님 말씀하신 부분 중

이해가 잘 안가는 부분이 있어 질문 드립니다.

2:27초쯤에 1바이트마다 64비트가 붙는게 아니다 라고 말씀하셨는데,

제가 이해한 바로는 포인터 변수의 크기는 운영체제 즉,

64bit 운영체제는 64bit, 32bit 운영체제는 32bit 크기로 지정되는 것이고 이 포인터는 변수의 자료형(메모리 크기)이 얼마가 됬건간에 운영체제에 따라 고정된다라고 이해했습니다.

그런데 말씀하신 1바이트마다 붙는게 아니다 라는 부분이 제가 이해한 것처럼 자료형의 크기 1바이트를 말씀하신 것인지, 아니면 변수가 여러 개 일 때, 각 변수마다 할당된 1바이트를 말씀하신 것이지 잘 이해가 안갑니다.

답변 2

0

널널한 개발자님의 프로필 이미지
널널한 개발자
지식공유자

운영체제가 1바이트 메모리에 8비트 주소를 부여해 관리하든 128비트 주소를 부여하든 1바이트 메모리 공간자체에 메모리의 주소가 저장되어 있는 것이 아니라는 설명을 한 것입니다. 많은 분들이 1바이트를 관리하기 위해 64비트 주소를 사용할 경우 총 9바이트 공간이 필요하다고 생각합니다. 배보다 배꼽이 더 큰 상황이라 할 수 있으며 이를 이상하게 생각합니다. 그런 질문을 자주 받다보니 '붙어있는 것이 아니'라는 표현을 강조한 것입니다.

OS는 1바이트에 대해 32비트 혹은 64비트 주소를 '부여'해 관리합니다. 그건 관리주체인 OS의 입장이고 1바이트 메모리 공간 입장에서는 자신에게 몇 비트 주소가 부여되어 관리되고 있는지 알아야 할 이유도 혹은 64비트 주소를 자신에게 붙여야 할 이유도 없습니다. 관리 주체와 대상을 나눠서 생각해야 할 문제라 하겠습니다. 참고하시기 바랍니다. 😄

0

안녕하세요, 인프런 AI 인턴입니다. 윤지환님.

포인터 변수에 대한 질문을 주셨네요. 포인터의 크기에 대해 궁금해하신 부분을 설명드리겠습니다.

먼저, 포인터 변수의 크기는 운영체제의 비트(bit) 아키텍처에 따라 결정되는 것이 맞습니다. 64비트 운영체제에서는 포인터의 크기가 64비트(8바이트)이고, 32비트 운영체제에서는 32비트(4바이트)입니다. 이는 포인터가 메모리의 주소를 저장하기 위한 공간으로 쓰이기 때문에, 주소 공간을 표현할 수 있는 범위에 따라 크기가 결정된다는 것을 의미합니다.

강사님께서 언급하신 “1바이트마다 64비트가 붙는게 아니다”라는 부분에 대해 구체적으로 말씀드리면, 이는 연속된 메모리 공간에 포인터가 할당되었을 때, 각각의 메모리 셸에 운영체제의 포인터 크기가 더해진다는 의미가 아니라는 것입니다.

즉, 포인터의 크기는 포인터 변수가 가리키는 데이터의 크기와는 무관하며, 운영체제에 따라 고정된 크기를 갖습니다. 여러 개의 변수가 있을 때는 각 변수마다 독립적으로 주소를 가지고 있으며, 1바이트 단위로 메모리 주소가 할당되는 구조라는 점에서 헷갈리지 않으셨으면 좋겠습니다.

이해가 되셨는지 모르겠네요. 더 상세한 설명이 필요하시다면 이 관련 질문 링크에서 포인터 변수 관련 질문입니다.를 참고하실 수 있습니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.

현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏

추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

윤지환님의 프로필 이미지
윤지환

작성한 질문수

질문하기