Tài nguyên Thư viện

Thành viên trực tuyến

3 khách và 0 thành viên

Thống kê

  • truy cập   (chi tiết)
    trong hôm nay
  • lượt xem
    trong hôm nay
  • thành viên
  • Menu Thư viện

    Gốc > Kiến thức tin học > Lập trình Pascal >

    Con trỏ: THỦ TỤC DISPOSE


         Một điều lý thú là khi một biến động không được dùng tới nữa ở trong chương trình, ta có thể thu hồi ô nhớ nó chiếm để dùng vào việc khác nhờ có có chương trình con Dispose. Tham số duy nhất cần cho thủ tục Dispose là biến con trỏ PointerVar trỏ vào biến động cần giải phóng. Có thể nói Dispose là thủ tục ngược lại với New.  

                        Dispose ( PointerVar ) ; 

         Ví dụ : Dispose(P); sẽ giải phóng ô nhớ của biến động P^.

         Bên cạnh Dispose được dùng để giải phóng ô nhớ của một biến động, Pascal còn được trang bị một cặp thủ tục : 

                        Mark(PVar)     để đánh dấu

                   Release(PVar)để giải phóng cả một vùng ô nhớ của nhiều biến động khác nhau. 

         Mark(PVar) sẽ gán giá trị của con trỏ của Heap ( bộ nhớ cấp phát động ) cho một biến con trỏ PVar nào đó. PVar này được dùng như là để đánh dấu vị trí đầu của vùng ô nhớ cần giải phóng sau này. Sau lệnh Mark, ta có thể dùng một loạt thủ tục New để tạo các biến động khác nhau và chúng sẽ chiếm ô nhớ kể từ vị trí đã được đánh dấu. Sau đó, nếu ta muốn lấy lại toàn bộ vùng biến động đã được đánh dấu, ta chỉ việc dùng  Release(PVar). Tất nhiên sau khi dùng Release, ta không còn có thể sử dụng các biến động nằm trong vùng vừa được giải phóng. 

         Sau đây là ví dụ về việc sử dụng Dispose

                        Type

                           Tp = ^Mang ;            (* Array *)

                           Mang = Array[ 1.. 100 ] Of Integer ; 

                        Var

                           P, Q : Tp ;

                        BEGIN

                          .......

                           New ( P ) ;                 (* Tạo ra một biến động *)

                           New ( Q ) ;     (* Tạo ra một biến động *)

                          .......

                           Dispose ( P ) ;            (* Giải phóng ô nhớ của biến động P^ *)

                           Dispose ( Q ) ;            (* Giải phóng ô nhớ của biến động Q^ *)

                          .......

                           New ( P )        (* Tạo ra biến động mới *)

                          .......

                           Dispose ( P ) ;            (* Giải phóng ô nhớ của biến động P^ *)

                        END. 

         Tiếp theo là ví dụ về việc sử dụng MakRelease

                        Var

                           P, Q, R, PMark : Tp ;

                        BEGIN

                          .......

                           New ( R ) ;           (* Tạo một biến động R^ *)

                           Mark ( PMark ) ;

                           New ( P ) ;            (* Tạo một biến động P^ *)

                          .......

                           New ( Q ) ;           (* Tạo một biến động Q^ *)

                          .......

                           Release ( PMark );  (* Giải phóng ô nhớ của 2 biến P^ và Q^ *)

                           (* Lưu ý : Biến động R vẫn còn giá trị *)

                           New ( P ) ;            (* Tạo ra biến động mới *)

                          .......

                           Dispose ( P ) ;      (* Giải phómg ô nhớ của P^ *)

                        END. 

         Riêng đối với kiểu Record có cấu trúc biến đổi, các tham số cho các thủ tục Dispose còn thêm giá trị của trường đánh dấu. Ví dụ nếu : 

                        New ( PointerVar, Nghe_nghiep ) ; 

       như ở trên thì ta phải ghi : 

                        Dispose ( PointerVar, Nghe_nghiep ) ; 

         Con trỏ và biến động được sử dụng rộng rãi để tạo ra các cấu trúc dữ liệu động và là một vấn đề hết sức lý thú nếu ta hiểu thấu đáo bản chất của nó. Chúng ta sẽ được đieều này thông qua các ví dụ được trình bày ở bài sau. Tuy nhiên phải nói rằng lập trình với biến con trỏ và biến động khó hơn và trừu  tượng hơn.


    Nhắn tin cho tác giả
    Đỗ Trung Thành @ 10:47 13/09/2009
    Số lượt xem: 1898
    Số lượt thích: 0 người
     
    Gửi ý kiến