Dead store (original) (raw)
In computer programming, a local variable that is assigned a value but is not read by any subsequent instruction is referred to as a dead store. Dead stores waste processor time and memory, and may be detected through the use of static program analysis, and removed by an optimizing compiler.
Property | Value |
---|---|
dbo:abstract | In computer programming, a local variable that is assigned a value but is not read by any subsequent instruction is referred to as a dead store. Dead stores waste processor time and memory, and may be detected through the use of static program analysis, and removed by an optimizing compiler. If the purpose of a store is intentionally to overwrite data, for example when a password is being removed from memory, dead store optimizations can cause the write not to happen, leading to a security issue. Some system libraries have specific functions designed to avoid such dangerous optimizations, e.g. explicit_bzero on OpenBSD. (en) En programación se conoce como almacenamiento muerto o dead store a la acción de asignarle un valor cualquiera a una variable local y no utilizarlo en ninguna instrucción subsecuente. Este tipo de error de software es indeseable debido a que requiere tiempo de computación y accesos a memorias de forma innecesaria, lo que impacta en el rendimiento. Existen técnicas de optimización en compiladores como por ejemplo la eliminación de código muerto que intentan encontrar y eliminar este tipo de prácticas del código fuente. Si el propósito de una variable es la intención de sobrescribir un dato, por ejemplo, cuando una contraseña se está eliminando de la memoria, las optimizaciones de almacenamiento muerto puede causar que la escritura no ocurra, provocando un problema de seguridad. Algunos sistemas tienen librerías específicas diseñadas para evitar estas peligrosas optimizaciones. Por ejemplo explicit_bzero en OpenBSD. (es) У програмуванні тупико́вим за́писом (англ. Dead Store) називають присвоювання значення локальній змінній, якщо це значення не читається жодною з наступних інструкцій. Тупикові записи займають процесорний час і пам'ять, не приносячи ніякої користі. Їх можна виявити за допомогою статичного аналізу коду. Приклад коду з тупиковим записом мовою Java: // DeadStoreExample.javaimport java.util.ArrayList;import java.util.List;public class DeadStoreExample { public static void main(String[] args) { List list = new ArrayList; // Це присвоєння є тупиковим записом, оскільки ArrayList ніколи не читається. list = getList; System.out.println(list) } private static List getList { return new ArrayList("hello"); }} У цьому прикладі створено примірник об'єкта ArrayList, але він жодного разу не використовувався. Замість цього змінній, яка посилалася на нього, присвоєно посилання на інший об'єкт. Область пам'яті, виділену під час оголошення списку ArrayList, слід звільнити, наприклад, за допомогою прибиральника. Приклад коду з тупиковим записом мовою JavaScript: function func(a, b) { var x; var i = 300; while (i--) { x = a + b; // тупиковий запис }} У цьому прикладі виконується багаторазовий перезапис однієї і тієї ж локальної змінної в циклі. А використовуватися в програмі після цього циклу може тільки значення, записане на останній ітерація. Таким чином, усі записи в змінну x, крім останнього, є тупиковими. В оптимізувальному компіляторі видаленням тупикових записів може займатися оптимізація видалення мертвого коду або оптимізація (англ. Dead Store Elimination). (uk) В программировании тупиковой записью (англ. Dead Store) называется присваивание значения локальной переменной, если это значение не читается никакой из последующих инструкций. Тупиковые записи занимают процессорное время и память, не принося никакой пользы. Они могут быть обнаружены с помощью статического анализа кода. Пример кода с тупиковой записью на языке Java: // DeadStoreExample.javaimport java.util.ArrayList;import java.util.List;public class DeadStoreExample { public static void main(String[] args) { List list = new ArrayList; // Это присваивание является тупиковой записью, так как ArrayList никогда не читается. list = getList; System.out.println(list) } private static List getList { return new ArrayList("hello"); }} В этом примере был создан экземпляр объекта ArrayList, но он ни разу не использовался. Вместо этого переменной, которая ссылалась на него, была присвоена ссылка на другой объект. Область памяти, которая была выделена при объявлении списка ArrayList, должна быть освобождена, например, с помощью сборщика мусора. Пример кода с тупиковой записью на языке JavaScript: function func(a, b) { var x; var i = 300; while (i--) { x = a + b; // тупиковая запись }} В этом примере происходит многократная перезапись одной и той же локальной переменной в цикле. В то время как использоваться в программе после этого цикла может только значение, записанное на последней итерации. Таким образом, все записи в переменную x, кроме последней, являются тупиковыми. В оптимизирующем компиляторе удалением тупиковых записей может заниматься оптимизация удаления мёртвого кода либо оптимизация (англ. Dead Store Elimination). (ru) |
dbo:wikiPageID | 12973267 (xsd:integer) |
dbo:wikiPageLength | 2744 (xsd:nonNegativeInteger) |
dbo:wikiPageRevisionID | 1119836838 (xsd:integer) |
dbo:wikiPageWikiLink | dbr:Dead_code dbr:Unreachable_code dbc:Software_anomalies dbr:Computer_programming dbr:Static_program_analysis dbc:Compiler_optimizations dbr:Garbage_collection_(computer_science) dbc:Articles_with_example_Java_code dbr:Optimizing_compiler |
dbp:cs1Dates | ly (en) |
dbp:date | April 2019 (en) |
dbp:wikiPageUsesTemplate | dbt:Reflist dbt:Use_dmy_dates dbt:Compiler_optimizations |
dct:subject | dbc:Software_anomalies dbc:Compiler_optimizations dbc:Articles_with_example_Java_code |
rdf:type | yago:WikicatCompilerOptimizations yago:WikicatSoftwareAnomalies yago:Abnormality114501726 yago:Abstraction100002137 yago:Act100030358 yago:Action100037396 yago:Anomaly114505821 yago:Attribute100024264 yago:Change100191142 yago:ChangeOfState100199130 yago:Condition113920835 yago:Event100029378 yago:Improvement100248977 yago:Optimization100260051 yago:PhysicalCondition114034177 yago:PsychologicalFeature100023100 yago:YagoPermanentlyLocatedEntity yago:State100024720 |
rdfs:comment | In computer programming, a local variable that is assigned a value but is not read by any subsequent instruction is referred to as a dead store. Dead stores waste processor time and memory, and may be detected through the use of static program analysis, and removed by an optimizing compiler. (en) En programación se conoce como almacenamiento muerto o dead store a la acción de asignarle un valor cualquiera a una variable local y no utilizarlo en ninguna instrucción subsecuente. Este tipo de error de software es indeseable debido a que requiere tiempo de computación y accesos a memorias de forma innecesaria, lo que impacta en el rendimiento. Existen técnicas de optimización en compiladores como por ejemplo la eliminación de código muerto que intentan encontrar y eliminar este tipo de prácticas del código fuente. (es) В программировании тупиковой записью (англ. Dead Store) называется присваивание значения локальной переменной, если это значение не читается никакой из последующих инструкций. Тупиковые записи занимают процессорное время и память, не принося никакой пользы. Они могут быть обнаружены с помощью статического анализа кода. Пример кода с тупиковой записью на языке Java: Пример кода с тупиковой записью на языке JavaScript: function func(a, b) { var x; var i = 300; while (i--) { x = a + b; // тупиковая запись }} (ru) У програмуванні тупико́вим за́писом (англ. Dead Store) називають присвоювання значення локальній змінній, якщо це значення не читається жодною з наступних інструкцій. Тупикові записи займають процесорний час і пам'ять, не приносячи ніякої користі. Їх можна виявити за допомогою статичного аналізу коду. Приклад коду з тупиковим записом мовою Java: Приклад коду з тупиковим записом мовою JavaScript: function func(a, b) { var x; var i = 300; while (i--) { x = a + b; // тупиковий запис }} (uk) |
rdfs:label | Almacenamiento muerto (es) Dead store (en) Тупиковая запись (ru) Тупиковий запис (uk) |
owl:sameAs | freebase:Dead store yago-res:Dead store wikidata:Dead store dbpedia-es:Dead store dbpedia-ru:Dead store dbpedia-uk:Dead store https://global.dbpedia.org/id/2xiWr |
prov:wasDerivedFrom | wikipedia-en:Dead_store?oldid=1119836838&ns=0 |
foaf:isPrimaryTopicOf | wikipedia-en:Dead_store |
is dbo:wikiPageRedirects of | dbr:Dead_assignment dbr:Dead_store_elimination dbr:Dead_variable dbr:Dead_store_optimization dbr:Explicit_bzero |
is dbo:wikiPageWikiLink of | dbr:Dead_code dbr:Dead_assignment dbr:Dead_store_elimination dbr:Dead_variable dbr:Optimizing_compiler dbr:Dead_store_optimization dbr:Explicit_bzero |
is foaf:primaryTopic of | wikipedia-en:Dead_store |