[완료]malloc에 대해서.
글쓴이: puresupe / 작성시간: 수, 2008/09/24 - 7:30오후
1 #include
2 #include
3
4
5 typedef struct {
6 int a;
7 int b;
8 int c;
9 int d;
10 }*keke;
11
12
13 keke ptr;
14 int main(void)
15 {
16 ptr = (keke)malloc(sizeof(int));
17 printf("%d\n",sizeof(*ptr));
18 return 0;
19 }
결과는 16이 나오구요.
여기서처럼 비록 4바이트만 memory allocation을 해도. 16바이트가 할당되는게 궁금해서요 ㅋ
컴파일러가 알아서 수정해서 컴파일하는걸까요?
Forums:
무슨 소린지... int
무슨 소린지...
가 어떤 결과를 보이길 기대하시는 건가요 ?
OTL
16바이트가 할당되지 않습니다.
32bit머신의 경우 ptr이 가르키는 것은 4바이트 int로 잡은 malloc 영역 선두를 가르키는 것은 맞습니다.
그러나 sizeof( *ptr)을 사용해 실제 영역을 참조하려는 순간 malloc으로 잡은 4바이트 영역 넘어 16바이트 크기만큼 참조합니다.
결국 이런 코드는 실제 malloc으로 할당받은 영역을 참조하는 것이 아니라, 다른 메모리 영역을 침범하는 것일 뿐입니다.
malloc...
일단 소스코드에 대한 설명은 윗분들이 해주셨고...
malloc() 에 대해 말씀드리면...
메모리 관리는 OS에서 담당합니다.
문제는 메모리 할당을 위해서 시스템 콜을 하면 성능이 떨어집니다.
그래서 malloc의 경우 사용자 요청이 있을때 OS에 요청(시스템콜)해서 큰 덩어리 하나를 할당 받아놓고
요청있을때 마다 큰 덩어리를 쪼개서 사용자에게 전달합니다.
큰덩어리를 어떻게 쪼개서 사용중이고 얼마나 남아있는지 관리를 해야 하므로
요청한 메모리 보다 많은 영역이 할당되게 됩니다.
malloc의 경우 다음 공간 위치와 현재 공간의 크기를 포함하기 때문에 4바이트 요청시 12바이트가 할당되는걸로 기억합니다.
(정확히 12바이트인지는 기억 안나지만 대충 비슷할껍니다.)
sizeof 에 대해 뭔가 잘못 알고계신듯 하네요
>> 여기서처럼 비록 4바이트만 memory allocation을 해도. 16바이트가 할당되는게 궁금해서요 ㅋ
위 말에 따르면 sizeof( x ) 하면 x address에 할당된(malloc) 메모리의 크기가 나오는거라고 알고
계신듯 하네요.
4 바이트만 할당된게 맞습니다.
단지 sizeof(*ptr) 했기 때문에 ptr의 값을 참조 했고 ptr은 keke라는 구조체기 때문에 구조체의 전체 크기
인 16 바이트를 리턴한겁니다.
sizeof 로는 동적으로 할당한 메모리의 크기를 알 순 없습니다.
물론 다른 방법으로도 주소만 가지곤 할당한 양을 알순없지만요.
아. 제대로 알았네요
아. 제대로 알았네요 ㅋ
리플달아주신분들 모두 답변감사드려요 ㅜ_ㅜ
열심히공부할꼐요 .덜덜덜..
댓글 달기