猿问

如何删除[]“知道”操作数组的大小?

如何删除[]“知道”操作数组的大小?

Foo* set = new Foo[100];// ...delete [] set;

你不能把数组的边界传递给delete[]..但这些信息储存在哪里?标准化了吗?


RISEBY
浏览 506回答 3
3回答

三国纷争

当您在堆上分配内存时,您的分配程序将跟踪您已分配了多少内存。这通常存储在“Head”段中,就在分配给您的内存之前。这样,当是时候释放内存时,去分配器确切地知道要释放多少内存。

郎朗坤

编译器的一种方法是分配更多的内存,并将元素的计数存储在HEAD元素中。例如,如何做到这一点:这里int* i = new int[4];编译器将分配sizeof(int)*5字节。int *temp = malloc(sizeof(int)*5)将“4”存储在第一个sizeof(int)字节*temp = 4;并设定ii = temp + 1;所以i将指向一个由4个元素组成的数组,而不是5个元素。和删除delete[] i;将以下列方式处理:int *temp = i - 1;int numbers_of_element = *temp;  // = 4... call destructor for numbers_of_element elements... that are stored in temp + 1, temp + 2, ... temp + 4 if needed free (temp)
随时随地看视频慕课网APP
我要回答