متاجر مهجورة

في برمجة الحاسوب ، يُعرف التخزين الميت بأنه متغير محلي تُسند إليه قيمة ولكن لا تُقرأ منه أي تعليمة لاحقة . تُهدر عمليات التخزين الميت وقت المعالج وذاكرته ، ويمكن اكتشافها باستخدام تحليل البرنامج الثابت ، وإزالتها بواسطة مُترجم مُحسِّن .

إذا كان الغرض من عملية التخزين هو الكتابة فوق البيانات عمدًا، كما هو الحال عند إزالة كلمة مرور من الذاكرة، فقد تؤدي تحسينات التخزين غير المستخدمة إلى عدم إتمام عملية الكتابة، مما يُسبب ثغرة أمنية. [ 1 ] تحتوي بعض مكتبات النظام على وظائف مُخصصة مُصممة لتجنب هذه التحسينات الخطيرة، كما هو الحال explicit_bzeroفي نظام OpenBSD . [ 2 ]

أمثلة

جافا

مثال على متجر ميت في جافا :

// 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

جافا سكريبت

مثال على متجر مهجور باستخدام جافا سكريبت :

دالة func ( a , b ) { متغير x ; متغير i = 300 ; بينما ( i -- ) { x = a + b ; // مخزن ميت } }

يقوم الكود الموجود في الحلقة باستبدال نفس المتغير بشكل متكرر، لذلك يمكن اختصاره إلى استدعاء واحد فقط. [ 3 ]

انظر أيضاً

مراجع