В ядре появился трейт, позволяющий аллокатору объявить указатель ненужным

27.12.2025

В ядре появился трейт, который даёт аллокатору возможность сообщить, что переданный ему указатель на самом деле не указывает на память и освобождать её не нужно.

Зачем это нужно

Указатели на единицу используются как «отсутствующее значение». Их нельзя разыменовывать, но можно передать функции, ожидающей ссылку, — с требованием, чтобы внутри ничего не происходило.

Но аллокатор не может знать, придёт ли ему такой указатель. Отсюда либо запрет на их передачу, либо обходной путь: вставить настоящий элемент нулевого размера, чтобы память выделялась и освобождалась как обычно.

Что даёт трейт

Аллокатор может объявить, что такой указатель освобождать не нужно, и компилятор сможет на это опереться.

Положение дел

Трейт объявлен, поддержка на стороне компилятора пришла следующим изменением через два с лишним месяца, а сама логика освобождения — позже. То есть пока это задел под будущие оптимизации, а не работающая оптимизация.

Оригинал

Add MaybeDangling to core; поддержка компилятора — rust-lang/rust#150447

Упоминаний: 1 · Просмотров: 4