프로그래밍

 3198, 1/160 회원가입  로그인  
   wofmwos
   [c언어] 동적할당중 메모리 할당량에 대해서 질문이요

http://www.hackerschool.org/HS_Boards/zboard.php?AllArticle=true&no=3299 [복사]


예전부터 참 이해가 안되는 부분이라 이렇게 질문하게 되네요

int arry[5];
sizeof(arry) 20의 값이 나오네요

int *Arry;
Arry = (int *)malloc(sizeof(int)*5);

일단 위의 arry와 같은 배열을 만들었다고 생각합니다.(?)

sizeof(Arry) 4의 값이 나옵니다. malloc이 첫 주소값을 줘서 그런가 봅니다.
Q1) 64비트 운영체제에서는 8바이트라고 들었는데 좀 이상하네요

sizeof(*Arry) 4의 값이 나옵니다. int형으로 잘 만들어 진거 같네요

Q2) 여기서 Arry에 20바이트가 할당되었다는 걸 확인하는 방법이 있을가요?
예전에 찾아보길.. 운영체제가 참조하는 영역을 자동으로 할당하기때문에 윈도우상에선 안될거라는
말도 들어봤는데 사실인가요?

  Hit : 4752     Date : 2012/02/01 06:25



    
별빛을담아 컴파일러 중에서 32bit와 64bit를 구분하는 경우가 있습니다.

저도 직접 해본건 아니지만 VS2008부터는 64비트 컴파일러가 따로 있습니다.
2012/02/01  
supershop Arry 는 포인터이기 때문에 sizeof(Arry) 를 하시면 4바이트가 리턴됩니다. (32비트 환경)
또 64비트 OS라고 항상 포인터 크기가 8바이트는 아닙니다.
별빛을담아님 말씀처럼 64비트 컴파일러로 컴파일해야지만 8바이트가 되죠.

Q2에 대한 답으로는 _msize 함수를 이용해보시기 바랍니다.
2012/02/02  
wofmwos 우와! 감사합니다. !! 볓빛을담아님 supershop님 !
오늘 2년동안 고민해온 답인 _msize 배웠습니다. 어째 이 간단한 방법을 아는 사람이 없어서...
좋은 스승의 필요성을 절감합니다.
64비트.. 32비트.. .. 공부해야할게 두배가 된기분이네요
이제 시작하는 입장에서는 암울합니다.
2012/02/02