Translatsiyalarni qayta talqin qilish dasturchiga asosiy turdagi
taxminlarni aniq buzish va ko'rsatgich yoki asosiy xotira ob'ektiga
boshqa turni qayta belgilash imkonini beradi. C++ tilining past
darajadagi tabiati tufayli dasturchi xom xotira ob'ektiga yozishi
va to'g'ridan-to'g'ri asosiy ob'ektni o'zgartirishi mumkin.
Ideal holda, dastur statik tarzda tasdiqlangan turi xavfsiz bo'lishi
mumkin.
Afsuski , asosiy turdagi tizimning umumiyligi va xom
xotira bilan ishlash imkoniyati tufayli bu C/C++ uchun mumkin
emas. Shuning uchun mudofaalar ish vaqtiga murojaat qilishlari kerak
Qayta talqin qilish translatsiyalari xotira ob'ektini boshqa tur ostida qayta
tasniflash imkonini beradi. Statik translatsiyalarning
afzalligi shundaki, ular
ish vaqti uchun hech qanday qo'shimcha xarajatlarga ega emas, lekin faqat
kompilyatsiya vaqtida tekshiriladi. Statik translatsiyalarda hech qanday ish
vaqti kafolati yo'q va noto'g'ri turdagi ob'ektlar ish vaqtida ishlatilishi mumkin.
Misol uchun, quyidagi rasmda asosiy turdagi ob'ektni noqonuniy pastga
tushirishdan keyin pastki tur sifatida foydalanish mumkin bo'lgan turdagi buzilish ko'rsatilgan.
C yoki C++ kabi past darajadagi tillarda turdagi xavfsizlik
aniq emas va xotira
ob'ekti o'zboshimchalik bilan qayta talqin qilinishi mumkin.
C++ cast operatsiyalarining murakkab to'plamini taqdim etadi.
Statik translatsiyalar faqat kompilyatsiya vaqtida ikki tur mos
kelishini tekshirish uchun tekshiriladi . Dinamik translatsiyalar sekin
ish vaqtini tekshirishni amalga oshiradi, bu faqat virtual
funktsiyalarga ega polimorfik
sinflar uchun mumkin, chunki aks
holda, xotira ob'ekti tartibida ob'ekt turini aniqlash uchun vtable ko'rsatkichi mavjud emas.
4 Xotira va tur xavfsizligi
Yuqoridagi kod misolida Greeter tipidagi ob'ekt ajratiladi va keyin
Base turiga ko'tariladi. Keyinchalik, Base turi Exec ga tushiriladi.
Ob'ektning ish vaqti turi Greeter bo'lgani uchun,
bu pasaytirish
noqonuniy hisoblanadi va bu turdagi chalkashliklarga olib keladi - bu
turdagi xavfsizlikning buzilishi.
43
Machine Translated by Google
Baza
Salom beruvchi
Exec
cheklar. Dasturdagi barcha translatsiyalarni aniq qilish va ularning ish
vaqtida to'g'riligini tekshirish orqali biz ishlash
vaqti turi kompilyatsiya
vaqtida statik ravishda qabul qilingan turga mos kelishini ta'minlaymiz
[8,11,18,28]. Bunday yechim xotira xavfsizligi kabi barcha ajratilgan
xotira ob'ektlari uchun metama'lumotlarni saqlashi kerak . Chegara
o'rniga, turdagi xavfsizlik mexanizmi har bir ajratilgan ob'ektning haqiqiy
turini qayd qiladi. C++ dagi barcha translatsiya turlari keyinchalik ish
vaqtini tekshirish bilan almashtiriladi.
Xotira va turdagi xavfsizlik xavfsizlik
zaifliklarining asosiy
sababidir. Xotira xavfsizligi ko'rsatkichlar uchun fazoviy va
vaqtinchalik imkoniyatlarni belgilaydi . Fazoviy xotira xavfsizligi
ko'rsatkichlar faqat mos keladigan chegaralardagi ob'ektlarga
kirishini kafolatlaydi. Vaqtinchalik xotira xavfsizligi asosiy ob'ektning jonliligini tekshiradi.
Do'stlaringiz bilan baham: