free,와 delete[]는 배열의 크기를 어떻게 아는걸까?
2018. 3. 2. 01:21
https://stackoverflow.com/questions/197675/how-does-delete-know-the-size-of-the-operand-array
malloc은 자기가 할당한 크기를 어딘가에 저장해둔다.(보통은 할당한 블록에) free는 이를 사용한다.
new[]는 malloc의 정보에 추가로 (일반적인 소멸자가 아닌 타입일 때) 자신이 삭제해야할 갯수를 저장해둔다. delete[]는 이를 사용한다.
할당되는 메모리 블록의 크기는 우리가 생각하는 크기 외에 추가로 할당될 수 있기에 이를 통해 배열의 크기를 추적하는 건 불가능하다.
'프로그래밍 > C, C++ 공부' 카테고리의 다른 글
STL 컨테이너 선택 알고리즘 (0) | 2018.03.11 |
---|---|
std::vector, list, deque의 벤치마크 (0) | 2018.03.05 |
str 시리즈 구현해보기 (strlen, strcpy, strncpy, strcat, strcmp, strchr, strstr, strtok) (0) | 2018.02.26 |
왜 strchr의 두번째 인자는 char가 아닌 int일까? (0) | 2018.02.25 |
C에서의 파일 입출력 (0) | 2018.02.23 |
free
knows how much memory to deallocate". Yes, the memory block size is stored "somewhere" bymalloc
(normally in the block itself), so that's howfree
knows. However,new[]
/delete[]
is a different story. The latter basically work on top ofmalloc
/free
.new[]
also stores the number of elements it created in the memory block (independently ofmalloc
), so that laterdelete[]
can retrieve and use that number to call the proper number of destructors. – AnT Oct 24 '09 at 4:35malloc
) and element count (bynew[]
). Note, that the former cannot be used to calculate the latter, since in general case the size of the memory block can be larger than really necessary for the array of requested size. Also note that the array element counter is only needed for types with non-trivial destructor. For types with trivial destructor the counter is not stored bynew[]
and, of course, not retrieved bydelete[]
. – AnT Oct 24 '09 at 4:38