Программалау оқулық Алматы, 012 Қазақстан Республикасы Білім жəне ғылым министрлігінің «Оқулық»


for (int i = 1; i< BLOCK_SIZE - 1; ++i)



Pdf көрінісі
бет187/466
Дата20.07.2022
өлшемі3,66 Mb.
#37798
түріПрограмма
1   ...   183   184   185   186   187   188   189   190   ...   466
for (int i = 1; i< BLOCK_SIZE - 1; ++i) 
newblock[i].next = &newblock[i + 1];
newblock[BLOCK_SIZE - l].next = 0;
// Бос ұяшықтар тізімінің басын белгілейміз:
headOfFree = &newblock[l];
р = newblock;

return p; // Белгіленген жадыға нұсқауышты қайтарамыз
}
Асыра жүктелген
 
new
операциясы мұраланады, сондықтан ол туындайтын 
объектілер үшін шақырылады. Егер олардың көлемдері негізгі объект көлеміне 
сəйкес келмесе (осылай болуы əбден ықтимал), онда қиындықтар туындауы 
мүмкін. Олардың алдын алу үшін операцияның басында көлемдердің сəйкес 
келуі тексеріледі. Егер объектінің көлемі 
new
операциясы асыра жүктелген 
көлемге тура келмесе, жадыны бөлуге сұраныс стандартты 
new
операциясына 
беріледі.
pObj 
класын қолданатын программада оның статикалық өрістерін ини-
циалдау əрекеті орындалуы керек (статикалық өрістер 201 б. қарастырылды):
pObj *pObj::headOfFree; // Келісім бойынша 0 көрсетіледі
const int pObj::BLOCK_SIZE = 1024;
Бұл мысалдан көрініп тұрғандай, жадыны үнемдеумен қатар, жоғары 
жылдамдыққа қол жеткізіледі, өйткені көбінесе жадыны бөлу үшін бірнеше 
қарапайым операторлар қолданылады. 
Егер
new
операциясы асыра жүктелген болса, 
delete
операциясы үшін 
де осы əрекет орындалуы керек (мысалы, біздің жағдайымызда стандартты 
delete 
операциясы объектінің басында оның көлемдері туралы дұрыс ақпарат 
таба алмайды, бұл өз кезегінде, программа іс-əрекеттерінің анықталмауына 
алып келеді). 
Қарастырылған мысалда 
delete
операциясы босатылған жады ұяшығын 
бос ұяшықтар тізіміне қосуы керек:
void pObj::operator delete(void * ObjToDie, size_t size){ 
if (ObjToDie == 0) return; 


Достарыңызбен бөлісу:
1   ...   183   184   185   186   187   188   189   190   ...   466




©emirsaba.org 2024
әкімшілігінің қараңыз

    Басты бет