Тупиковий запис

Матеріал з Вікіпедії — вільної енциклопедії.
Перейти до навігації Перейти до пошуку

У програмуванні тупико́вим за́писом (англ. Dead Store) називають присвоювання значення локальній змінній, якщо це значення не читається жодною з наступних інструкцій. Тупикові записи займають процесорний час і пам'ять, не приносячи ніякої користі. Їх можна виявити за допомогою статичного аналізу коду.

Приклад коду з тупиковим записом мовою Java:

// DeadStoreExample.java
import java.util.ArrayList;
import java.util.List;

public class DeadStoreExample {
 public static void main(String[] args) {
  List<String> list = new ArrayList<String>(); // Це присвоєння є тупиковим записом, оскільки ArrayList ніколи не читається.
  list = getList();
  System.out.println(list)
 }

 private static List<String> getList() {
  return new ArrayList<String>("hello");
 }
}

У цьому прикладі створено примірник об'єкта ArrayList<String>, але він жодного разу не використовувався. Замість цього змінній, яка посилалася на нього, присвоєно посилання на інший об'єкт. Область пам'яті, виділену під час оголошення списку ArrayList, слід звільнити, наприклад, за допомогою прибиральника.

Приклад коду з тупиковим записом мовою JavaScript:

function func(a, b) {
  var x;
  var i = 300;
  while (i--) {
    x = a + b; // тупиковий запис
  }
}

У цьому прикладі виконується багаторазовий перезапис однієї і тієї ж локальної змінної в циклі. А використовуватися в програмі після цього циклу може тільки значення, записане на останній ітерація. Таким чином, усі записи в змінну x, крім останнього, є тупиковими.

В оптимізувальному компіляторі видаленням тупикових записів може займатися оптимізація видалення мертвого коду[1] або оптимізація видалення тупикових записів (англ. Dead Store Elimination)[2].

Примітки[ред. | ред. код]

  1. HTML5, and Real World Site Performance: Seventh IE9 Platform Preview Available for Developers. Архів оригіналу за 29 січня 2013. Процитовано 7 серпня 2021.
  2. Майкл Ховард, Дэвид Лебланк Writing secure code[недоступне посилання з грудня 2019]