Новости           

Программы

Turbo Pascal

Игры

Документация

"Странности"

FAQ

Ссылки

Благодарности

Гостевая книга

От автора

БУФЕРИЗАЦИЯ

              При использовании  разряженной  матрицы вместо обычных пере-
         менных можно применять динамическое выделение памяти под матрицу.
         Пусть,  например, имеется два процесса А и В, выполняющиеся в од-
         ной программе.  Предположим, что процесс А требует при работе 60%
         доступной памяти,  а при работе процесса В требуется 55%  памяти.
         Если в процессе А и в процессе В память будет  выделяться  с  по-
         мощью  локальных переменных,  то процесс А не сможет обратиться к
         процессу В,  а процесс В не сможет обратиться к процессу А,  пос-
         кольку потребуется более 100% памяти. Если процесс А не обращает-
         ся к процессу В,  то никаких трудностей не будет.  Трудности поя-
         вятся  при  попытке процесса А обратиться к процессу В.  Выход из
         этого положения заключается в динамическом выделении памяти и для
         процесса  А и для процесса В с освобождением памяти перед обраще-
         нием одного процесса к другому процессу.  Другими  словами,  если
         при выполнении каждого процесса,  А и В, требуется более половины
         имеющейся доступной памяти и процесс А обращается к  процессу  В,
         то  должно  использоваться  динамическое распределение памяти.  В
         этом случае процессы А и В будут получать в свое распоряжение па-
         мять, когда она им действительно потребуется.

              Предположим, что при выполнении некоторой программы, исполь-
         зующей  две  указанные ниже функции,  остается 100 000 байт неис-
         пользованной памяти.

             procedure B; forward;
             procedure A;
             var
               a:array[1..600000] of char;
                     .
                     .
                     .
             begin
                     .
                     .
                     .
                     B;
                     .
                     .
                     .
             end;
             procedure B;
             var
               b:array[1..55000] of char;
             begin
                     .

  
                     .
                     .
             end;

              Здесь каждый  из процессов А и В имеет локальные переменные,
         на которые расходуется более половины имеющейся доступной памяти.
         В данном случае нельзя будет выполнить процесс В, поскольку памя-
         ти недостаточно для выделения 55 000 байт  под  локальный  массив
         "в".
              В подобных случаях трудности часто оказываются непреодолимы-
         ми,  но в некоторых случаях кое-что сделать можно. Если процесс А
         не требует сохранения содержимого массива "а" при выполнении про-
         цесса  В,  то  процессы  А  и В могут совместно использовать один
         участок памяти.  Это можно обеспечить динамическим выделением па-
         мяти  под массивы А и В.  Процесс А перед обращением к процессу В
         должен освободить память и затем вновь ее получить после заверше-
         ния процесса В. Программа должна иметь следующую структуру:

             procedure B; forward;
             procedure A;
             var
                    a:^array[1..600000] of char;
             begin
                    New(a);
                    .
                    .
                    .
                    Dispose(a); { освобождение памяти для процесса В }
                    B;
                    New(a); { новое выделение памяти }
                    .
                    .
                    .
                    Dispose;
             end;

             procedure B;
             var
               b:^array[1..55000] of char;
             begin
                    New(b);
                    .
                    .
                    .
                    Dispose(b);
             end;


              При выполнении процесса В существует только  указатель  "а".
         Хотя этим методом вы будете пользоваться нечасто, его следует хо-
         рошо знать, поскольку он часто является единственным способом ре-
         шения подобных проблем.

(с)Все права защищены

По всем интересующим вопросампрошу писать на электронный адрес

    Rambler's Top100 PROext: Top 1000
    Rambler's Top100 Яндекс цитирования
Hosted by uCoz