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

도전적인 뱀님의 프로필 이미지
도전적인 뱀

작성한 질문수

홍정모의 따라하며 배우는 C언어

11.2 메모리 레이아웃과 문자열

강의 18: 42

작성

·

201

0

  • #define _CRT_SECURE_NO_WARNINGS
    #include <stdio.h> 
    #include <stdlib.h> 
    
    int main()
    {
    	/* Array Versus Pointer */
    	const char* pt2 = "I am a String!.";
    	const char* pt3 = "I am a String!.";
    	const char* pt4 = "I am a String!!!!!!."; // <- different
    	const char ar1[] = "I am a String!.";
    	const char ar2[] = "I am a String!.";
    	const char ar3[] = "I am a String!!."; // <- different
    
    	
    
    	/* Memory address check */
    
    	/* Local variables */
    
    	printf("Stack high \t%llu %llu %llu\n",
    		(unsigned long long)&pt2, (unsigned long long)&pt3, (unsigned long long)&pt4);
    
    
    
    }

     

위코드를 실행하면 

Stack high      1096839066952 1096839066984 1096839067016

이렇게 포인터변수의주소가   32씩 차이나는데 이유가뭔가요? 

x64에서 실행하면 포인터변수의크기가 8바이트 아닌가요?

 

답변 2

1

혹시 어떤 환경에서 (운영체제, 컴파일러) 돌려보셨나요?

저는 첨부하신 코드를

각각 아래와 같은 환경에서 돌려보았고 결과가 말씀하신대로 8 차이로 잘 나왔습니다. 

 

우분투 22.04, gcc

$ ./a.out
Stack high 	140721418819112 140721418819120 140721418819128

 

macOS, gcc 

minchul$ ./a.out
Stack high 	6098614008 6098614000 6098613992

 

일단 64비트 체계에서 포인터의 크기가 8 바이트인 것은 맞습니다.

 

(답변 추가)

윈도우 Visual Studio 에서 돌려보니 32씩 차이가 나네요.

다만 아래처럼 포인터 사이에 공백이 들어 있는데, 아마 컴파일러의 차이가 아닐까 싶습니다.

 

 

0

답변 감사합니다 제가 윈도우에서 돌려서 그런거 같네요

도전적인 뱀님의 프로필 이미지
도전적인 뱀

작성한 질문수

질문하기