2013-06-14 2 views
-1

sizeof, malloc 및 malloc_size에 대해 읽었지만 어떤 이유로 그것이 목표 c에서 제대로 작동하지 않습니다.메모리 할당 후 포인터 크기 얻기

내가하려는 것은 동적으로 메모리를 할당 한 다음 포인터의 크기를 확인하는 것입니다.

나는이 일을 시도 :

void *pointer = malloc(sizeof(void) * 8); 
long test1 = malloc_size(pointer); // Its value is 16 
long test2 = sizeof(pointer); // Its value is 8 

링크를 대답 아래에 정확히 같은 질문을하지만 나를 위해 작동하지 않습니다.

편집 : 는 또한

char *malloc(sizeof(char) * 8) 

를 사용하여 시도했지만 중 하나가 작동하지 않았다.

+0

'sizeof (void)'는 실제로 의미가 없습니다. 여기를 참조하십시오 : http://stackoverflow.com/questions/1666224/what-is-the-size-of-void – MatthewD

+0

sizeof (void)는 sizeof (char)와 동일한 값 1을 반환합니다. 이것은 1입니다. 컴파일 오류 나 경고를 생성합니다. –

+0

컴파일러 관련 동작입니다. GCC는 1을 반환하지만 Visual C++ 2012는 0을 반환하고 컴파일러 경고를 제공합니다. 여기를 참고하십시오 : http://msdn.microsoft.com/en-au/library/tf66xte5.aspx – MatthewD

답변

1

malloc_size이 정답을 반환합니다. - malloc은 요청한 크기 이상의 블록을 반환하지만 조금 더 클 수 있습니다. 이는 동적 메모리를 관리하는 방식의 일면에 불과하며 디스크 파일이 할당 블록으로 구성되는 방식과 유사합니다. 64 비트 인텔에 대한 빠른 테스트는 malloc의 할당 단위가 16 바이트라고 제안합니다.

+0

감사합니다! 이제 마침내 n> = 16 인 malloc (n)을 사용하여 16 바이트를 할당하는 이유와 malloc (17)이 32를 할당하는 이유를 알게되었습니다. –

0

pointer은 * 유형이므로 아무런 메모리가 pointer에 할당 되어도 sizeof(pointer)은 고정 값이어야하며 4 (32 비트 sys) 또는 8 (64 비트 sys)입니다.

+0

그러면 어떻게 동적으로 할당 된 포인터의 크기를 얻을 수 있습니까? –