
     15. 
    ~~~~~~~~~~~~~~~~~~~

    ६,  ᬠਢ    ⮩  ,  뫨
, ..   ଠ  ࠧ 뫨 ।   -
⢮  祭 ᥣ ६ 믮 ,   ஬
 뫨   .  ணࠬ,  ,    㦤  
ᯮ짮  ,      ࠧ
  믮.   ⮩ 楫 㦠  -
, ᪮    ᮧ,    
室  㭨⮦  砭 ᯮ짮.

     ᪨ ६      -
 ᠭ  ६,       ᪨
६묨,   ⠪ ६  אַ    
䨪ࠬ.  ⠪ אַ 㯠  ६ -
 ᯥ樠쭠 ६, ᮤঠ  , -
  ᪮  ६.   ᯥ樠쭠 ६
ᯮ     ६  뢠
.
                               

    । ६-㪠⥫
    ================================

    । ⨯ 㪠⥫ ⮨    ᫥  
 㣮 ⮢:  ᨬ 㪠⥫ "^", ⥬ 䨪
⨯ ᪨ ६,     㤥 뫠
  ६-㪠⥫  ⨯.

     ᫥饬 ਬ ,     -
騩   㪠⥫.   PersonPointer   㪠-
⥫  ६ ⨯ PersonRecord:
    
    type
      PersonPointer = ^PersonRecord;
    
      PersonRecord = record
                       Name: string[50];
                       Job:  string[50];
                       Next: PersonPointer;
                     end;
    var
      FirstPerson,LastPerson,NewPerson: PersonPointer;
                                                      
    
    ६ FirstPerson, LastPerson, NewPerson , -
 ࠧ,  -,    㪠뢠
  ⨯ PersonRecord.
      ,  䨪 ⨯   ।  ⨯
㪠⥫   । .
    
       
    饭 ६ (楤 NEW)
    =====================================

     ⮣,  ⮡ ਬ 㪠⥫  ,  㦭,
⢥,  - ६,    㪠-
  뫠.   ᮧ (ࠧ饭   )  
६   ⨯  㦨 ⠭⭠ 楤 NEW.  
楤   ࠬ,      㪠⥫
 ६ ⮣ ⨯,   ᮡࠥ ᮧ.

    ⠪:

    NEW(PtrVar);

     PtrVar -  ६ 㪠⥫.

     ࠧ,   ६  ⨯  PersonRecord  
 ᮧ ஬:
    
    NEW(FirstPerson);
    
    ⢨ ⮣   ⮨  ⮬,   ᫥  -
 ६ FirstPerson 㪠뢠  ᪨ ࠧ-
饭    ⨯ PersonRecord.

    ᢠ  ६묨-㪠⥫ﬨ ⨬ ⮫쪮
 ⮬ 砥, ᫨  㪠⥫   ⨯. -
 筮 ⨯  ⠪ ࠢ     権
⭮襭 =    <> ,    १ ⨯ BOOLEAN
(TRUE  FALSE).

     ⢥     㪠⥫ ਭ ᯥ樠쭮
祭 NIL.  ᫨ ६  祭 NIL,   -
砥,    㪠뢠    ६.  祭 NIL
ᮢ⨬  ᥬ ⨯ 㪠⥫.    ᯮ짮-
 ⠪   ࠢ.

    ६, ᮧ ⠭⭮ 楤ன NEW,  ࠧ-
  ᯥ樠쭮  , 宦  ⥪, 
  "" (heap - 㪢쭮  "").  ࡮-⥬
ࠢ 娯   㪠⥫ 娯,    砫 -
 ணࠬ 樠 ᮬ ࢮ  ᢮
 .      맮 楤 NEW 㪠⥫ 娯
த  ࠢ  孨 ᠬ ᢮  
 ᫮ , ᮮ⢥饥 ࠧ  ᪮ -
.
                                  

    楤 MARK  RELEASE
    ========================

    ᫨   ᪠  ६      㦭
ணࠬ,    ,  ⮩   ६,
 ᯮ짮  ⠭묨 楤ࠬ MARK  RELEASE.
楤 MARK ᢠ ன ६ 祭 㪠-
⥫ 娯.

    ⠪:
    
    MARK(PtrVar);
    
     PtrVar    ६ ⨯ 㪠⥫.  楤
RELEASE ⠭ 㪠⥫ 娯  ,    ᮤ-
   㬥.

    ⠪:
    
    RELEASE(PtrVar);
    
     PtrVar - ६ ⨯ 㪠⥫,  ।⥫쭮 -
⠭   楤 MARK.   ࠧ, 楤
RELEASE 㤠  ᪨ ६, ᯮ "-
" ⮣ ,     ﭨ  ᢮  ࠭⢮,
⮥ ६묨  ।  娯.  ⮬,  ᫨ 㦭
᢮   ।  娯,   MARK  RELE-
ASE 㦭 짮 楤ன DISPOSE, ᠭ .


    㭪 MEMAVAIL
    ================

    ⠪: MEMAVAIL

    ⠭⭠ 㭪  MEMAVAIL    । ࠧ
㯭 ࠭⢠  娯   .   
⨯ INTEGER,  祬,  ᫨    娯 㯭 ,  祬 32767
,  㭪 MEMAVAIL  頥  ⥫쭮  祭.
 ⮬  ࠢ쭮  ᫮  ᢮  ⮢   
65536.0+MEMAVAIL.    ਬ ⠭ -
 REAL  祭 १ ⨯ REAL;   易  ⥬,
 १ ॢ蠥 稭 MAXINT.
                                 

    ᯮ짮 㪠⥫
    ========================

    ।,     楤 NEW  ᮧ ᫥-
⥫쭮 ஢ ᥩ ⨯ PersonRecord (. ।-
騩 ਬ  ணࠬ),     Next   
㪠뢠  ᫥ ᮧ .  ਢ 
ᮢ㯭 ஢  믮  室 १  ᯨ᮪ -
ᥩ  뢮 ᮤন   (FirstPerson    砫
㪠뢠     ᯨ᪥):
    
    while FirstPerson<>nil do
      with FirstPerson^ do
        begin
          WriteLn(Name,'  : ',Job);
          FirstPerson:=Next;
        end;
                            
    祭 FirstPerson^.Name  ਭ   
Name  ,   뫠 㪠⥫ FirstPerson.

      ணࠬ  ਬ 㪠-
     ᯨ᪠ 䠬  易   ᮢ 
ࠡ.     ࠡ     ,  
 䠬  㤥   ப, ᫥ ⮣ -
 ᯨ᮪ 뢮  ࠭.  ,  ᫥  ⨬, -
,   ᯨ᮪, ᢮  㣨 楫. -
-㪠⥫ HeapTop ᯮ  ⢥  楫  -
       ࠭ ࢮ砫쭮 祭 㪠⥫
娯,  ⮬  ।  ⢥ INTEGER (㪠⥫  
楫)  ᮢ襭 ந.


    program Jobs;
    type
      PersonPointer = ^PersonRecord;
    
      PersonRecord = record
                       Name: string[50];
                       Job:  string[50];
                       Next: PersonPointer;
                     end;
    var
      HeapTop: ^Integer;
      FirstPerson,LastPerson,NewPerson: PersonPointer;
      Name: string[50];
    begin
      FirstPerson:=nil;
      Mark (HeapTop);
      repeat
        Write(' 䠬: ');
        ReadLn(Name);
        if Name<>'' then
           begin
             New(NewPerson);
             NewPerson^.Name:=Name;
             Write(' : ');
             ReadLn(NewPerson^.Job);
             WriteLn;
             NewPerson^.Next:=nil;
             if FirstPerson=nil then
                FirstPerson:=NewPerson
             else
                LastPerson^.Next:=NewPerson;
             LastPerson:=NewPerson;
             LastPerson^.Next:=nil;
           end;
      until Name='';
      Writeln;
      while FirstPerson<>nil do
        with FirstPerson^ do
          begin
            WriteLn(Name,' - ',Job);
            FirstPerson:=Next;
          end;
      Release(HeapTop);
    end.
    

    楤 DISPOSE
    =================

     楤 MARK/RELEASE   ,  祭-
   娯,  ⭮    娯  ᯮ짮 楤ன
⠭⭮ ᪠ DISPOSE.

ਬ砭. 祭  ⤠ ᥡ   ⮬,  楤-
-----------   DISPOSE    MARK/RELEASE  ᯮ ᮢ襭
            ࠧ 室  ࠢ 娯,      
              "  "    
              !  ணࠬ   짮  
            ࠢ 娯  楤ன DISPOSE,   -
            ன 楤 MARK/RELEASE.  襭   -
            室 ਢ  ।᪠㥬 १⠬.

    맮 楤 DISPOSE  ᫥騩 ᨭ⠪:

    DISPOSE(PtrVar);

     ࠬ PtrVar 砥 ६-㪠⥫.

    楤 DISPOSE ᢮ (.. 頥 ⥬) -
 ,     .  
⮬  ⮨  ⫨稥 ⮩ 楤  MARK/RELEASE,  
᢮   娯,       
  .

    ।,     ᪮쪮 ६, 
  뫠 뤥  娯.  騩 㭮 -
 ﭨ   娯      ⢨  맮  DISPOSE(Var3)  
MARK(Var3)/RELEASE(Var3):

                         ᫥              ᫥
                           DISPOSE          MARK/RELEASE

       Ĵ         Ĵ         Ĵ
         Var1             Var1             Var1  
       Ĵ         Ĵ         Ĵ
         Var2             Var2             Var2  
       Ĵ         Ĵ         Ĵ
         Var3                                    
       Ĵ         Ĵ         Ĵ
         Var4             Var4                   
       Ĵ         Ĵ         Ĵ
         Var5             Var5                   
       Ĵ         Ĵ         Ĵ
         Var6             Var6                   
HiMem  Ĵ         Ĵ         Ĵ


                . 15-1. ਬ DISPOSE.


     ᭮,    ᫥ 鸞 맮 楤 DISPOSE 娯
   ᪮쪨  ⥩ , ६-
 ᢮묨  ﬨ.    ᫥ 맮 ⥬
㤥  ᯮ짮  ᢮ ,  ᫨  ।
  室  ࠧ   ६.


    楤 GETMEM
    ================

    ⠭⭠ 楤 GETMEM ᯮ  楫 뤥
࠭⢠  娯.   ⫨稥  楤 NEW,  뤥-
 ⮫쪮 ࠭⢠, ᪮쪮 ॡ  ⨯,  -
 㪠뢠 㬥, 楤 GETMEM  ணࠬ
ࠢ ⢮ 뤥塞 ࠭⢠.  楤 GET-
MEM 뢠   ࠬࠬ:

    GETMEM(PtrVar,IntExp);

     PtrVar -   ६ ⨯ 㪠⥫,  IntExp -
楫 ࠦ, 饥 ᫮ 뤥塞 .


    楤 FREEMEM
    =================

    ⠭⭠ 楤  FREEMEM  ᯮ   
娯 楫  .   ⮬ ᫥    ⭥஬
楤 GETMEM.  楤 뢠   ࠬࠬ:

    FREEMEM(PtrVar,IntExp);

     ࠬ PtrVar 砥 ந ६-㪠-
⥫,    ࠬ  IntExp - 楫 ࠦ,  饥 ᫮
頥 ,  ஥       
, ࠭ 뤥 ⮩ ६ 楤ன GETMEM.


    㭪 MAXAVAIL
    ================

    ⠪: MAXAVAIL

    ⠭⭠ 㭪 MAXAVAIL 頥 ࠧ  襣
뢭   ᢮  ,  饣  娯.  
࠭⢮   .    ⨯ INTEGER,
 ᫨  稨   32767 ,   MAXAVAIL -
頥 ⥫쭮 ᫮.   ⮬ 砥 ४⭮ ᫮  ᢮-
    65536.0+MAXAVAIL.  
 ᯮ짮 ⢥ ⠭  祭 १-
 ⨯ REAL, ᪮ १ ॢ蠥 祭 MAXINT.


    ⥫  楫
    =================

    ⠭ 㭪樨  ᯥ稢 ।⢥ ஫
,  ᮤন  㪠⥫;   㭪樨 ORD  PTR.
㭪 ORD 頥 ,  ᮤঠ騩   㬥-㪠-
⥫  稭 ⨯ INTEGER,   PTR ८ࠧ ᢮ -
 ⨯ INTEGER  㪠⥫, ᮢ⨬  ᥬ ⨯ 㪠-
⥫.
       㭪樨  ॢ    㬥  㪠
⭮ ணࠬ, ᪮   ࠢ 㪠-
⥫    .    ० 饭 
⠭ 쬠 묨,  ᪮     -
 ᪨  ६묨  㣨 ६   
ணࠬ.

     ᮢ
    ===============

     ,    㪠⥫  믮 
஢ન ࠭ 祭.  ⢥⢥  ,  ⮡ 㪠-
⥫ 뫠  ⨬ ,   ணࠬ.
    ᫨    㤭  ᯮ짮 㪠⥫,
     ⠪ ਥ: ஡ -
  㬠 ,    ⠥ ᤥ -  । -
 .
