2009-12-26 6 views
14

가능한 중복 : C에서 프로그래밍 할 때
C programming : How does free know how much to free?free()는 얼마나 많은 메모리를 할당 해제해야하는지 알고 있습니까?

, 나는 종종 메모리를 할당 malloc()를 사용 free() 그것을 해제 :

MyObject* objArr= (MyObject*) malloc(sizeof(MyObject)*numberOfObjects); 
/** Do stuff **/ 
free(objArr); 

어떻게 free()가 얼마나 많은 메모리를 알 수 있습니까 할당을 취소 하시겠습니까? malloc() 포인터를 기억할 어딘가에 테이블을 만들고 각 포인터가 얼마나 많은 메모리를 가리키고 있습니까?

포인터의 이름을 바꾸면 free()이 실패합니까? 예 :

MyObject* objArr= (MyObject*) malloc(sizeof(MyObject)*numberOfObjects); 
MyObject* newPtr= objArr; 
free(newPtr); /** Does this fail? **/ 

포인터를 증가시키고 free()을 실행하면 어떻게됩니까? 예 :

MyObject* objArr= (MyObject*) malloc(sizeof(MyObject)*numberOfObjects); 
newPtr++; 
free(newPtr); /** What happens now? **/ 

원래 배열의 끝 부분에서 추가 메모리 덩어리를 할당 해제합니까?

+3

중복 http://stackoverflow.com/questions/1518711/c-programming-how-does-free-know-how-much-to-free – codaddict

답변

19

가장 일반적인 방법은 일부 정보를 주소로 보내기 전에 저장하는 것입니다. 따라서 malloc이 주소 0x1004를 반환하면 내부적으로 malloc은 0x0FFC에서 시작된 메모리를 제쳐두고 0xFFC - 0x1003 사이의 메모리 크기와 같은 다양한 정보를 저장하지만 0x1004에서 할당이 시작된다는 것을 응용 프로그램에 알려줍니다.

무료로 중요한 것은 malloc이 반환 한 주소와 완전히 동일한 주소를 얻는 것입니다.

관련 문제