#include <stdio.h>
#include <malloc.h>
 
typedef struct _Person
{
    char Name[20];
	int Age;
} Person;
 
void HeapMemorySize(void* _Memory)
{
    printf("HeapMemorySize : %d\n", _msize(_Memory));
}
 
int main(void)
{
    char* pszData = (char*)malloc(sizeof(char) * 10);
    int* pnData = (int*)malloc(sizeof(int) * 10);
    Person* pPerson = (Person*)malloc(sizeof(Person));
 
    HeapMemorySize((void*)pszData);
    HeapMemorySize((void*)pnData);
    HeapMemorySize((void*)pPerson);
 
    return 0;
}

동적으로 할당된 메모리의 크기는 할당 당시에 확실히 명시해야 하므로 할당받는 처지에서는 그 크기를 모를 수가 없습니다. 그러나 간혹 함수 단위로 코드가 분할되면서 포인터로 주소를 받긴 하지만 크기를 받지 못해 할당된 메모리 크기를 모를 때도 있습니다. 이때 윈도우 운영체제의 경우 _msize()함수를 이용하면 크기를 알아낼 수 있습니다.

(참고로 리눅스, 유닉스는 malloc_usable_size() 함수를 사용합니다.)


[ 출저 ] - 명강의로 완성하는 C 프로그래밍

'C' 카테고리의 다른 글

[C] - 환경변수 출력  (0) 2014.09.08
[C] - const 포인터 사용법  (0) 2014.09.08
[C] - 스캔셋(Scanset)  (0) 2014.09.08
[C] - scanf() 함수  (0) 2014.09.08
[C] - getchar(), _getch(), _getche() 차이점  (0) 2014.09.08
블로그 이미지

행복그리고..

,