Есть ли способ отбросить статический объект жизни в Rust? - PullRequest
1 голос
/ 28 сентября 2019

При поиске ответа я обнаружил этот вопрос , однако о статических объектах времени жизни ничего не говорится.Можно ли использовать метод, упомянутый в этом ответе (вызывая drop() для объекта), для статических объектов времени жизни?

Я представлял ситуацию как связанный список.Вам необходимо хранить узлы списка в течение (потенциально) всего времени жизни программы, однако вы также можете удалять элементы из списка.Кажется расточительным оставлять их в памяти для всего выполнения программы.

Спасибо!

1 Ответ

2 голосов
/ 28 сентября 2019

Нет.Суть static в том, что он статический: он имеет фиксированный адрес в памяти и не может быть перемещен оттуда.Как следствие, каждый может свободно ссылаться на этот объект, потому что он гарантированно будет там, пока выполняется программа.Вот почему вы можете использовать static в виде &'static -референции и никогда не можете претендовать на владение.

Кроме того, делать это с целью сохранения памяти бессмысленно: объект запекаетсяв исполняемый файл и отображается в памяти при доступе.Все, что может случиться, - это то, что ОС освободит память mapping .Тем не менее, поскольку память никогда не выделяется из кучи, во-первых, сохранения не будет.

Единственное, что вы могли сделать, - это заменить объект небезопасным изменяемымдоступ.Это и опасно (поскольку компилятор может предполагать, что объект на самом деле не изменяется) и бессмысленно из-за того, что память не может быть освобождена, поскольку она является частью отображения памяти исполняемого файла.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...