Как delete [] "знает" размер массива операндов?

ОДИН ИЗ подходов для компиляторов c++ - выделить немного больше cpp памяти и сохранить количество c++ элементов в элементе заголовка.

Пример c++ того, как это можно сделать:

Здесь

int* i = new int[4];

компилятор c++ выделит sizeof(int)*5 байты.

int *temp = malloc(sizeof(int)*5)

Сохранит "4" в cpp первых sizeof(int) байтах

*temp = 4;

и установите cpp i

i = temp + 1;

Итак, i будет указывать на c++ массив из 4 элементов, а cpp не 5.

И удаление

delete[] i;

будет обрабатываться cpp следующим образом:

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)

c++

2022-10-31T19:22:57+00:00