![]() |
Главная Случайная страница Контакты | Мы поможем в написании вашей работы! | |
|
Windows ОЖ-сі жадымен жұмыс істеу механизмдерін келесідей іске асырады:
1) виртуал жады үлкен массивтер және «структуралармен» жұмыс үшін;
2) проекциаланатын файлдар үлкен мәліметтер ағынымен (әдетте) жұмыс үшін және бір компьютерде мәліметтерді бірнеше процестердің бірге қолдануы үшін;
3) «куча» – кіші объектілер жиынымен жұмыс үшін.
10.2.1 Динамикалық таратылатын жады. «Куча».
Виртуалды жадыны қолдану барлық кезде ыңғайлы емес. Мысалы, байланысқан тізімдер мен ағаштарды «кучаны» қолданып өңдеген жеңілірек. Динамикалық таратылатын жадының артықшылығы – ол жадыны бөлу ұсақтығын, парақтар көлемін елемеу. Ал кемшілігі жады блоктарын босату, бөлу аз жылдамдықпен орындалады.
«Куча» – адрестік кеңістіктен орын алып қойған (резервтелген) бөлім. Программаның мәліметтер үшін жады облысын алу барысына қарай «кучаны» басқаратын арнайы қадағалаушы (heap manager) парақтық файлдан парақ-парақпен оған физикалық жадыны беріп отырады. Блоктар босағанда кучаны қадағалаушы жүйеге физикалық жадының сәйкес беттерін қайтарып береді.
С++ үшін негізгі жадыда ақпаратты сақтаудың екі әдісі бар:
1) айнымалыларды қолдану. Айнымалыларға берілетін жады облысы «компиляция» кезінде соларға тіркеледі де программаны орындау кезінде өзгертілмейді;
2) жадыны динамикалық тарату жүйесін қолдану. Бұл жағдайда біздің программа және стек арасында орналасқан бос жадыдан мәліметтерге жады қажеттілік туындағанда ғана беріледі. Бұл бөлім «куча» деп аталады.
Жадыны динамикалық тарату жүйесі – бұл программа орындалу кезінде қандай да бір жады облысын алу құралы.
Жадыны динамикалық беру дегеніміз – жадыны программа орындалуы кезінде алу, яғни оның орындалуы кезінде айнымалылар құруға болады. Жадыны динамикалық түрде беруге келген сұранысты қанағаттандыру үшін «куча» қолданылады.
адрестердің жоғарғы облысы | Стек |
Куча | |
Глобалды мәліметтер | |
адрестердің төменгі облысы | Программа коды |
10.1 сурет – Жады облыстарындағы бөлімдердің орналасуы
С++ тілінде жадыны бөлетін және босататын екі оператор бар new және delete. New операторы жады облысын динамикалық бөледі. Delete операторы бұрын бөлінген динамикалық жадыны босатады.
айнымалы-сілтеуіш = new айнымалы типі;
delete айнымалы-сілтеуіш;
Мысал 10.1 – Программада new және delete операторын қолдану.
#include<iostream.h>
void main()
{int *p;
p=new int; // жадыны бөлу
*p=55; // сол облысқа 55 орнату
cout<<*p<<endl; // экранға шығару
delete p;} // жадыны босату
Мысал 10.2 – Динамикалық беретін жадыны инициализациялау.
#include<iostream.h>
void main()
{int *p;
p=new int (345); // жадыны инициализациялау
cout<<*p<<endl;
delete p;}
Мысал 10.3 – Жадыны массивтерге ерекшелеп беру.
//dinamic memory for odnomerny massiv
#include<iostream.h>
void main()
{int *p; int i;
p=new int [10]; // массивтің 10-элементіне жады
for(i=0;i<10;i++) p[i]=10+i; // массивті толтыру
for(i=0;i<10;i++) cout<<p[i]<<" "; // массивті экранға шығару
cout<<endl;
delete []p;} // массивті жою
Динамикалық массивті құрудың бірнеше түрі бар. Ең ыңғайлысы – массивтің екі өлшемі де программаны орындау барысында берілгені.
Мысал 10.4 – Екіөлшемді динамикалық массивті құрудың бір түрі.
//dinamic memory for 2-merny massiv
#include<iostream.h>
void main()
{ int nrow, ncol, i,j;
cout<<"enter count rows and columns"<<endl;
cin>>nrow>>ncol;
int**a=new int *[nrow];
for(i=0;i<nrow;i++)
a[i]=new int[ncol];
for(i=0;i<nrow;i++)
for(j=0;j<ncol;j++)
cin>>a[i][j];
for(i=0;i<nrow;i++){
for(j=0;j<ncol;j++)
cout<<a[i][j]<<" ";
cout<<endl;}
cout<<endl; }
Дата публикования: 2015-10-09; Прочитано: 735 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!