Mrtvý obchod - Dead store
v programování, lokální proměnná, které je přiřazena hodnota, ale není čtena žádnou další instrukcí, se označuje jako a mrtvý obchod. Mrtvý ukládá plýtvání časem procesoru a pamětí a může být detekován při použití statická analýza programu a odstraněny znakem optimalizace kompilátoru.
Pokud je účelem úložiště záměrně přepsat data, například když je heslo odstraněno z paměti, může optimalizace mrtvého úložiště způsobit, že k zápisu nedojde, což povede k problému se zabezpečením.[1] Některé systémové knihovny mají specifické funkce navržené tak, aby nedocházelo k nebezpečným optimalizacím, např. explicit_bzero
na OpenBSD.[2]
Příklady
Příklad Java mrtvého obchodu:
// DeadStoreExample.javaimport java.util.ArrayList;import java.util.Arrays;import java.util.List;veřejnost třída DeadStorePříklad { veřejnost statický prázdnota hlavní(Tětiva[] args) { Seznam<Tětiva> seznam = Nový ArrayList<Tětiva>(); // This is a Dead Store, as the ArrayList is never read. seznam = getList(); Systém.ven.tisk(seznam); } soukromé statický Seznam<Tětiva> getList() { vrátit se Nový ArrayList<Tětiva>(Pole.jako seznam("Ahoj")); }}
Ve výše uvedeném kódu an ArrayList <řetězec>
objekt byl instancován, ale nikdy nebyl použit. Místo toho je v dalším řádku proměnná, která na ni odkazuje, nastavena tak, aby ukazovala na jiný objekt. The ArrayList
který byl vytvořen, když seznam
bylo prohlášeno, bude nyní třeba zrušit přidělení, například pomocí a Popelář.
Příklad mrtvého obchodu v jazyce JavaScript:
funkce func(A, b) { var X; var i = 300; zatímco (i--) { X = A + b; // mrtvý obchod }}
"Kód ve smyčce opakovaně přepisuje stejnou proměnnou, takže jej lze omezit pouze na jedno volání."[3]