В ядре появился трейт, позволяющий аллокатору объявить указатель ненужным
27.12.2025В ядре появился трейт, который даёт аллокатору возможность сообщить, что переданный ему указатель на самом деле не указывает на память и освобождать её не нужно.
Зачем это нужно
Указатели на единицу используются как «отсутствующее значение». Их нельзя разыменовывать, но можно передать функции, ожидающей ссылку, — с требованием, чтобы внутри ничего не происходило.
Но аллокатор не может знать, придёт ли ему такой указатель. Отсюда либо запрет на их передачу, либо обходной путь: вставить настоящий элемент нулевого размера, чтобы память выделялась и освобождалась как обычно.
Что даёт трейт
Аллокатор может объявить, что такой указатель освобождать не нужно, и компилятор сможет на это опереться.
Положение дел
Трейт объявлен, поддержка на стороне компилятора пришла следующим изменением через два с лишним месяца, а сама логика освобождения — позже. То есть пока это задел под будущие оптимизации, а не работающая оптимизация.
Оригинал
Add MaybeDangling to core; поддержка компилятора — rust-lang/rust#150447
Упоминаний: 1 · Просмотров: 4