Phân tích hình dạng bộ nhớ heap

Một phần của tài liệu Kỹ thuật phân tích chương trình tĩnh cho bài toán phân tích hình dạng bộ nhớ heap (Trang 31 - 33)

Phân tích hình dạng là việc xác định tĩnh và tự động các tính chất của heap

của một chƣơng trình (còn đƣợc gọi là Store). Mỗi trạng thái của heap có thể đƣợc biểu diễn thông qua một đồ thị gồm các nút đại diện cho các khối bộ nhớ đã đƣợc cấp phát và các cạnh biểu diễn con trỏ giữa các khối bộ nhớ, cùng với các biến của chƣơng trình cũng có thể trỏ tới các nút trong heap [8]. Hiện nay, phân tích hình dạng bộ nhớ heap có thể tiếp cận theo nhiều cách khác nhau, và có thể thực hiện ở nhiều mức (mức cụ thể, mức trừu tƣợng). Nhƣng đều sử dụng lý thuyết giàn ngữ nghĩa của chƣơng trình. Từng nút trong mã nguồn sẽ đƣợc gắn một giá trị ngữ nghĩa (semantic). Ngữ nghĩa của một nút chịu sự ràng buộc trong mối quan hệ với các nút ở trƣớc và sau nó trong mã nguồn chƣơng trình

tùy theo ngữ nghĩa của các câu lệnh đối với thuộc tính cần xem xét. Từ sự ràng buộc về ngữ nghĩa của các nút trong mã nguồn sẽ tạo ra một hệ phƣơng trình ràng buộc. Thuật toán lặp tìm điểm cố định nhỏ nhất đƣợc áp dụng giải hệ phƣơng trình ràng buộc này. Kết quả sẽ là một tập các trạng thái heap có thể có tại mỗi nút (điểm) của chƣơng trình.

Mục tiêu của phân tích hình dạng là xác định, tại mỗi điểm của chƣơng trình, một tập đồ thị hình dạng thể hiện tất cả các cấu trúc heap có thể xảy ra trong quá trình thực thi chƣơng trình tại thời điểm đó. Từ đó rất nhiều thông tin hữu ích ta có thể thu đƣợc qua phân tích.

 Một câu hỏi phổ biến là xác định tính tới đƣợc của các nút trong heap (reachability – một nút heap có thể tới đƣợc từ một biến).

 Cho hai nút và bắt đầu từ một nút, liệu có thể tới đƣợc nút còn lại thông qua các kết nối con trỏ không.

 Một số tính chất khác nhƣ xem xét việc tồn tại của chu trình:

o Tính rời nhau (disjointness – hai cấu trúc dữ liệu có chung phần tử không),

o Tính chia sẻ (sharing – có nhiều hơn một biểu thức con trỏ tham chiếu tới nút của heap) cũng rất quan trọng.

Nhìn chung, ngƣời ta quan tâm tới hình dạng của một heap, đó là một đặc tính của cấu trúc dữ liệu của nó. Đối với một chƣơng trình thao tác với danh sách móc nối đơn, điều này có nghĩa chúng ta có thể tiến hành xác định tĩnh xem heap của nó bao gồm các danh sách hoặc chu trình hay không. Ngoài ra cũng có một số cấu trúc dữ liệu phổ biến đƣợc quan tâm nhƣ danh sách móc nối kép, cấu trúc cây, DAGs.

Kết quả của phân tích hình dạng có nhiều ứng dụng. Chúng hữu ích hoặc rất cần thiết đối với một số dạng kiểm chứng chƣơng trình (ví dụ xác định có tham chiếu con trỏ null trong chƣơng trình), tối ƣu hóa và tự động song song (các cấu trúc dữ liệu tách rời có thể đƣợc xử lý song song).

Hiện nay, phân tích hình dạng bộ nhớ heap có thể tiếp cận theo nhiều cách khác nhau nhƣ phân tích dựa trên 3 - giá trị logic (Program Analysis via 3 – Valued Logic) [8] [11] [12]. Ở luận văn tập trung đề cập tới kỹ thuật phân tích hình dạng heap dựa trên việc thiết lập và giải các ràng buộc để tìm ra đƣợc kết quả là hình dạng cuối cùng của heap.

Một phần của tài liệu Kỹ thuật phân tích chương trình tĩnh cho bài toán phân tích hình dạng bộ nhớ heap (Trang 31 - 33)