Thuật toán Steensgaard

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 29 - 30)

Đây là một phân tích thô về cơ bản bằng cách xem sự việc theo hai hƣớng. Sử dụng một tập hợp gồm các thẻ malloc – i và hai thẻ có dạng và cho mỗi biến tên . Với chƣơng trình đã chuẩn hóa ở trên, nhƣng ở đây sinh ràng buộc tƣơng đƣơng với các thẻ nhƣ sau:

Các ràng buộc tạo ra một quan hệ tƣơng đƣơng trên các thẻ, có thể tinh toán trong thời gian tuyến tính. Kết quả hàm points – to nhƣ sau:

{ } { }

Sau đó ta có thể tự điều chỉnh những trƣờng hợp xảy ra trong chƣơng trình. Nếu chúng ta chỉ xem xét một loại chƣơng trình nhất định, thì có thể tiếp tục loại bỏ các đích con trỏ không phù hợp.

Xét ví dụ ở phần 3.1.1. Thuật toán Steengaard sinh ra các ràng buộc sau:

Các ràng buộc này bao gồm một quan hệ tƣơng đƣơng nhƣ sau:

Hình 3.1.Quan hệ tương đương giữa các ràng buộc

Điều này chỉ ra rằng:

{ }

Rõ ràng kém chính xác hơn thuật toán Andersen. Điều chỉnh các địa chỉ thực sự thực hiện ta có:

{ }

Ta thấy trƣờng hợp kết quả trƣờng hợp tƣơng ứng với thuật toán

Andersen. Nhƣng vẫn sai với trƣờng hợp .

Nhƣ trên luận văn đã nêu một số thuật toán để phân tích con trỏ. Cách giải quyết chung của 2 thuật toán là dựa trên lý thuyết giàn để tạo ra một phƣơng trình ràng buộc, sau đó áp dụng thuật toán điểm cố định giải và thu đƣợc tập đích của con trỏ. Tuy nhiên ta có thể phân tích con trỏ một cách tối ƣu hơn bằng cách phân tích hình dạng bộ nhớ heap. Tức là nó có thể xác định tập point – to

chính xác hơn các kỹ thuật trên.

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 29 - 30)