कई साल पहले मैंने कुछ स्व-संशोधित कोड को डीबग करने की कोशिश में एक सुबह बिताई, एक निर्देश ने निम्नलिखित निर्देश के लक्ष्य पते को बदल दिया, अर्थात, मैं एक शाखा पते की गणना कर रहा था। यह असेंबली लैंग्वेज में लिखा गया था और जब मैंने एक बार में एक निर्देश के माध्यम से कदम रखा तो पूरी तरह काम किया। लेकिन जब मैंने कार्यक्रम चलाया तो यह विफल रहा। आखिरकार, मुझे एहसास हुआ कि मशीन मेमोरी से 2 निर्देश ला रही थी और (जैसा कि निर्देश मेमोरी में दिए गए थे) मैं जो निर्देश संशोधित कर रहा था वह पहले से ही लाया गया था और इस प्रकार मशीन निर्देश के अनमॉडिफाइड (गलत) संस्करण को निष्पादित कर रही थी। बेशक, जब मैं डिबगिंग कर रहा था, यह एक समय में केवल एक निर्देश कर रहा था।
मेरा बिंदु, स्व-संशोधित कोड परीक्षण / डिबग के लिए बेहद बुरा हो सकता है और अक्सर मशीन के व्यवहार के रूप में छिपी हुई धारणाएं होती हैं (यह हार्डवेयर या आभासी हो)। इसके अलावा, सिस्टम कभी-कभी मल्टी-कोर मशीनों पर निष्पादित विभिन्न थ्रेड्स / प्रक्रियाओं के बीच कोड पेज साझा नहीं कर सकता है। यह वर्चुअल मेमोरी आदि के कई लाभों को पराजित करता है। यह हार्डवेयर स्तर पर की गई शाखा अनुकूलन को भी अमान्य कर देगा।
(नोट - मैं JIT को स्व-संशोधित कोड की श्रेणी में शामिल नहीं करता। JIT कोड के एक प्रतिनिधित्व से एक वैकल्पिक प्रतिनिधित्व में अनुवाद कर रहा है, यह कोड को संशोधित नहीं कर रहा है)
सब, सब में, यह सिर्फ एक बुरा विचार है - वास्तव में साफ है, वास्तव में अस्पष्ट है, लेकिन वास्तव में बुरा है।
बेशक - यदि आपके पास 8080 और ~ 512 बाइट्स की मेमोरी है, तो आपको ऐसी प्रथाओं का सहारा लेना पड़ सकता है।