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



Pdf көрінісі
бет186/466
Дата20.07.2022
өлшемі3,66 Mb.
#37798
түріПрограмма
1   ...   182   183   184   185   186   187   188   189   ...   466
pObj 
класы үшін өзіндік 
new
опе-
рациясын жазуға болады, ол жадының үлкен блогын бөліп, содан кейін онда 
Obj
объектісіне нұсқауыштарды орналастырады. Бұл үшін 
pObj
объектісіне
 
headOfFree
статикалық өрісі енгізіледі, бұл өрісте кезекті объектіні орнала-
стыру үшін блоктың алғашқы бос объектісіне нұсқауыш сақталады.
Қолданылмайтын ұяшықтар тізімге байланыстырылады. Байланыс өрісіне 
жады жұмсамау үшін біріктірме (
union
) қолданылады, оның көмегімен бір 
ғана ұяшық объектіге нұсқауышты орналастыру үшін де немесе келесі бос 
ұяшықпен байланыс орнату үшін де қолданылады:
class pObj{
public:
static void * operator new(size_t size);
...
private: 
union{ 
Obj *p; // Объектіге нұсқауыш
pObj *next; // Келесі бос ұяшыққа нұсқауыш
};
static const int BLOCK_SIZE;// Блоктың өлшемі
// Бос ұяшықтар тізімінің тақырыбы: 
static pQbj *headOfFree;
};
void * pObj::operator new(size_t size){
// new стандартты операциясының дұрыс көрсетілмеген
// жады көлеміне сұранысын қайта бағыттау:
if (size != sizeof(pObj)) return ::operator
new(size);
pObj *p = headOfFree; //Алғашқы бос ұяшыққа нұсқауыш
// Бос ұяшықтар тізімінің нұсқауышын жылжыту:
if (p) headOfFree = р -> next;
14-1140


210
// Егер жадыда бос орын болмаса, кезекті блокты бөлеміз:
else {
pObj *newblock = static_cast

1
(::operator new(BLOCK_SIZE * sizeof(pObj)));
// Біріншіден басқа барлық ұяшықтар бос (ол
// қолданылуда), оларды байланыстырамыз:


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




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

    Басты бет