Loading article…
コンピュータプログラミング において、デッドストアとは、値が代入されたものの後続命令によって読み取られないローカル変数のことです。デッドストアはプロセッサの時間とメモリを浪費するため、静的プログラム解析によって検出され、最適化コンパイラによって削除されます。
ストアの目的が意図的にデータを上書きすることである場合(例えば、メモリからパスワードを削除する場合)、デッドストア最適化によって書き込みが行われず、セキュリティ上の問題が発生する可能性があります。[ 1 ]一部のシステムライブラリには、 OpenBSDexplicit_bzeroなど、このような危険な最適化を回避するように設計された特定の関数があります。[ 2 ]
Javaにおけるデッドストアの例:
// DeadStoreExample.java import java.util.ArrayList ; import java.util.Arrays ; 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 > ( Arrays . asList ( "Hello" )); } }上記のコードでは、ArrayList<String>オブジェクトがインスタンス化されていますが、使用されていません。代わりに、次の行で、そのオブジェクトを参照する変数が別のオブジェクトを指すように設定されています。宣言ArrayList時に作成されたオブジェクトは、例えばガベージコレクタlistによって解放される必要があります。
JavaScriptにおけるデッドストアの例:
function func ( a , b ) { var x ; var i = 300 ; while ( i -- ) { x = a + b ; // デッドストア} }ループ内のコードは同じ変数を繰り返し上書きするため、呼び出しを1回に減らすことができます。[ 3 ]