강의

멘토링

로드맵

Inflearn brand logo image

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

Dongni님의 프로필 이미지
Dongni

작성한 질문수

10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트

[필수개념] 메모리와 포인터(pointer) #4 array to pointer decay

포인터 사이즈와 주소값

해결된 질문

작성

·

61

·

수정됨

0

- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요!
- 먼저 유사한 질문이 있었는지 검색해보세요.
- 서로 예의를 지키며 존중하는 문화를 만들어가요.
- 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.

 

안녕하시렵니까

 

본론부터 말씀드리자면, 해당 강의 3분 27초경에 출력되는 값을 보면

 

0x...010

0x...010

0x...014

0x...014

라는 것을 확인할 수 있는데, 주소 값이 4가 커졌다는 건 int 배열의 각 값들이 4 Byte이기 때문이라고 이해했습니다.

 

다만 이전 강의에서

- int는 4바이트, double은 8바이트니까 포인터도 4, 8바이트가 되어야 하는 게 아닌가?

- 포인터의 크기는 실행 OS 체제의 비트마다 달라짐

- Window OS 64비트를 사용하는 경우의 포인터 사이즈 = 8 Byte

- Window OS 32비트를 사용하는 경우의 포인터 사이즈 = 4 Byte

 

이러한 내용을 확인할 수 있었는데,

 

int 배열을 포인터로 변환했으니, 이전과 마찬가지로 주소값이 8이 커져야 한다고 생각했는데 그렇지 않았다는 점에서 의문이 생겼습니다!

 

int 배열을 포인터에 할당하면서 포인터로 전환되는 것이 아니라 단순히 주소를 할당했기 때문에 이런 일이 발생하는걸까요?

 

또한, 포인터의 크기가 8 Byte라고 했을 때, 연속되는 포인터라고 가정한다면 두 포인터의 주소값 차이는 8이 맞는지도 궁금합니다!

 

감사합니다.

답변 2

0

큰돌님의 프로필 이미지
큰돌
지식공유자

안녕하세요 ㅎㅎ

int 배열을 포인터로 변환했으니, 이전과 마찬가지로 주소값이 8이 커져야 한다고 생각했는데 그렇지 않았다는 점에서 의문이 생겼습니다!

-> 네 포인터와 int타입의 바이트와는 무관합니다. 포인터는 컴퓨터내에서 변수를 관리하는 주소이기 때문에 해당 컴퓨터에서 관리하는 양식 -> 8바이트 또는 4바이트가 됩니다.

 

또한, 포인터의 크기가 8 Byte라고 했을 때, 연속되는 포인터라고 가정한다면 두 포인터의 주소값 차이는 8이 맞는지도 궁금합니다!

-> 네 맞습니다.

 


 


 

또 질문 있으시면 언제든지 질문 부탁드립니다.

좋은 수강평과 별점 5점은 제게 큰 힘이 됩니다. :)

감사합니다.

강사 큰돌 올림.

0

안녕하세요, 인프런 AI 인턴입니다. 유동훈님.

포인터와 관련된 메모리 주소 및 크기에 대해 잘 이해하고 계시군요. 질문하신 내용에 대해 설명드리겠습니다.

  1. 메모리 주소와 데이터 타입 크기:

    • int 배열에서 각 요소의 크기는 각각 4 Byte입니다. 따라서 배열의 메모리 주소가 4씩 증가하는 것은 int 데이터 타입이 4바이트 크기를 차지하기 때문입니다.
  2. 포인터 크기:

    • 포인터의 크기는 해당 플랫폼 및 운영체제의 아키텍처에 따라 다릅니다. 64비트 운영체제에서는 포인터 크기가 보통 8 Byte이며, 32비트에서는 4 Byte입니다.
    • 포인터 변수로 int 배열의 주소를 저장할 때, 각 포인터는 주소(메모리 위치)를 저장합니다. 이때 포인터 크기 자체는 운영체제에 의존합니다.
  3. 메모리 주소값 차이:

    • 포인터를 사용하여 배열을 탐색할 때는 출력되는 주소의 차이가 데이터 타입의 크기(int의 경우 4)에 따라 증가합니다. 따라서 포인터도 그 데이터 타입의 크기로 증가하는 것이 맞습니다.
    • 연속된 포인터가 각각 다른 주소를 가져야 한다면, 그 차이는 포인터가 가리키는 데이터량에 따라 결정되며, 포인터 자체의 바이트 크기와는 관련이 없습니다.

이해를 돕기 위한 관련된 질문을 찾아보니 다음 링크를 참조하시면 도움이 될 것 같습니다:

이 질문에서는 포인터 크기가 64비트 시스템에서 8바이트인 이유와 메모리 효율성에 대해 논의하고 있습니다. 시스템 아키텍처에 따른 포인터의 크기와 배열 크기 증가의 차이에 대한 더 많은 설명을 확인할 수 있습니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

Dongni님의 프로필 이미지
Dongni

작성한 질문수

질문하기