Size: a a a

Compiler Development

2021 July 09

AT

Alexander Tchitchigi... in Compiler Development
Конструкторы и деструкторы вызываются в рантайме. 😉
источник

AT

Alexander Tchitchigi... in Compiler Development
Деструктор вообще должен быть виртуальным, так что вызывается через указатель.
источник

A

Arelav in Compiler Development
Ну а код вызова этих деструкторов явно написан в библиотеке?
источник

AT

Alexander Tchitchigi... in Compiler Development
Ага, ставлю на free. 😄
источник

A

Arelav in Compiler Development
Эм нет, ещё раз есть new expression он вызывает operator new, который может вызывать malloc или быть переопредлен аллокатором. Затем на этом куске памяти вызывается конструктор/ы
Код вызова этих конструкторов кажется "генерируется" компилятором
источник

A

Arelav in Compiler Development
Ну и в общем количество объектов(не количество памяти, с этим умеет работать аллокатор обычно), можно например сохранять в регистре/на стеке, если компилятор видит что delete рядом
Или например записать в часть адреса.
Возможно как то ещё извратиться, ну кроме очевидного решения попросить памяти не sizeof(T) * N , а ещё + sizeof(size_t)
источник

M

MaxGraey in Compiler Development
то как раелизованы new[]/new и delete/delete[] можно посмотреть здесь
https://github.com/llvm/llvm-project/blob/main/libcxx/src/new.cpp#L62
источник

а

а это кто in Compiler Development
new запрашивает у аллокатора память и вызывает конструктор типа, delete вызывает деструктор объекта и делает запрос аллокатору который освобождает память
источник

а

а это кто in Compiler Development
для их реализации не нужно хранить количество объектов или что-то ещё
источник

A

Arelav in Compiler Development
>operator
Вопрос про expression
источник

A

Arelav in Compiler Development
Для массивов вопрос
источник

а

а это кто in Compiler Development
expression вызывает operator :p
источник

A

Arelav in Compiler Development
Помимо этого он ещё вызывает н конструкторов в случае массива
источник

A

Arelav in Compiler Development
И н деструкторов
источник

A

Arelav in Compiler Development
Вопрос откуда узнает н в случае деструкторов
источник

AT

Alexander Tchitchigi... in Compiler Development
Делит размер аллоцированного блока на размер одного объекта.
источник

A

Arelav in Compiler Development
Размер аллоцировано блока может быть больше необходимого
источник

D

Danya in Compiler Development
Оттуда же, откуда free узнает сколько памяти ему удалять?
источник

A

Arelav in Compiler Development
(в большинстве аллокаторов для маленьких аллокаций он будет действительно больше)
источник

A

Arelav in Compiler Development
Перечитай пожалуйста ещё раз все что я написал
источник