Home >Backend Development >C++ >How Does `delete[]` Know the Size of the Array It's Deallocating?

How Does `delete[]` Know the Size of the Array It's Deallocating?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-12-25 00:18:10763browse

How Does `delete[]` Know the Size of the Array It's Deallocating?

How Memory Allocators Know the Array Size for Delete[]

In C , the delete[] operator is used to deallocate an array of objects from memory. However, unlike the new[] operator, which explicitly requires the array size, delete[] seemingly operates without this information. How does it determine the size of the array?

When you allocate memory on the heap using new[], the memory allocator allocates a contiguous block of memory for the array elements and stores additional information about the allocation, including its size. This information is typically stored in a header immediately preceding the allocated memory.

Standardization

The method of storing the array size with the allocated memory is not standardized in C itself. Different memory allocators implement various techniques:

  • Heap Metadata: Some allocators use an in-memory data structure to track allocation details, including array sizes. This data structure is managed by the allocator and is not directly visible to the program.
  • Memory Header: As mentioned earlier, many allocators store the array size and other information in a header immediately before the allocated memory. This header is usually prefixed with a unique tag or flag to distinguish it from the actual data.
  • Special Pointer Value: Some allocators may use a special value in the array pointer to indicate the end of the array. For example, the pointer might be set to a null pointer when the array is fully deallocated.

Retrieval of Array Size

During deletion, delete[] retrieves the array size from the associated header or memory allocator. By knowing the size, delete[] can efficiently deallocate the entire array of objects.

Conclusion

In summary, the memory allocated by new[] carries information about its size, either through heap metadata, memory headers, or pointer values. This information is used by the delete[] operator to determine the array size during deallocation, enabling efficient memory management without the need to explicitly provide the size.

The above is the detailed content of How Does `delete[]` Know the Size of the Array It's Deallocating?. For more information, please follow other related articles on the PHP Chinese website!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn