Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 61 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
61
Dung lượng
2,34 MB
Nội dung
ĐẠI HỌC QUỐC GIA HÀ NỘI TRƢỜNG ĐẠI HỌC CÔNG NGHỆ NGUYỄN QUANG ĐẠI 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 LUẬN VĂN THẠC SĨ CÔNG NGHỆ THÔNG TIN Hà Nội – 2015 ĐẠI HỌC QUỐC GIA HÀ NỘI TRƢỜNG ĐẠI HỌC CÔNG NGHỆ NGUYỄN QUANG ĐẠI 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 Ngành: Công nghệ thông tin Chuyên ngành: Kỹ thuật phần mềm Mã số: 60480103 LUẬN VĂN THẠC SĨ CÔNG NGHỆ THÔNG TIN NGƢỜI HƢỚNG DẪN KHOA HỌC: TS Nguyễn Trƣờng Thắng Hà Nội - 2015 LỜI CAM ĐOAN Tôi xin cam đoan công trình nghiên cứu có giúp đỡ Thầy giáo hƣớng dẫn đồng nghiệp quan Các nội dung kết nghiên cứu luận văn hoàn toàn trung thực Trong luận văn, có tham khảo đến số tài liệu số tác giả đƣợc liệt kê mục tài liệu tham khảo Hà Nội, 03 tháng 07 năm 2015 Học viên Nguyễn Quang Đại LỜI CẢM ƠN Tôi xin chân thành cảm ơn thầy cô giáo Khoa Công nghệ Thông tin, Trƣờng Đại học Công nghệ – Đại học Quốc gia Hà Nội tận tình giảng dạy trang bị cho kiến thức, giúp hoàn thành luận văn Tôi xin đƣợc bày tỏ lòng kính trọng lời cảm ơn sâu sắc tới TS Nguyễn Trƣờng Thắng, Phó Viện trƣởng, Viện Công nghệ Thông Tin – Viện Hàn lâm Khoa học Công nghệ Việt Nam Thầy động viên hƣớng dẫn hoàn thành luận văn tốt nghiệp Mặc dù cố gắng để hoàn thành luận văn, nhƣng phạm vi khả cho phép tránh khỏi thiếu sót, mong nhận đƣợc cảm thông tận tình bảo thầy cô Hà Nội, 03 tháng 07 năm 2015 Học viên Nguyễn Quang Đại MỤC LỤC MỤC LỤC DANH MỤC CÁC KÝ HIỆU VÀ CHỮ VIẾT TẮT DANH SÁCH HÌNH VẼ MỞ ĐẦU CHƢƠNG GIỚI THIỆU CHUNG 1.1 Đặt vấn đề 1.2 Giới thiệu phân tích chƣơng trình tĩnh 1.3 Điểm mạnh điểm yếu phân tích chƣơng trình tĩnh 1.4 Các kỹ thuật phân tích chƣơng trình tĩnh CHƢƠNG LÝ THUYẾT NỀN TẢNG 11 2.1 Nền tảng phân tích ngữ nghĩa chƣơng trình 11 2.1.1 Lý thuyết giàn 11 2.1.2 Thuộc tính đóng 13 2.1.3 Phƣơng trình bất phƣơng trình 15 2.1.4 Lý thuyết điểm cố định 16 2.1.5 Các kỹ thuật tăng tốc độ hội tụ widening/narrowing 18 2.2 Kết luận chƣơng 22 CHƢƠNG PHÂN TÍCH HÌNH DẠNG HEAP 23 3.1 Phân tích trỏ 23 3.1.1 Thuật toán Andersen 23 3.1.2 Thuật toán Steensgaard 25 3.2 Phân tích trỏ liên thủ tục 26 3.3 Phân tích hình dạng nhớ heap 27 3.2.1 Kỹ thuật phân tích 29 3.2.2 Đánh giá 33 3.3 Kết luận chƣơng 33 CHƢƠNG THỰC NGHIỆM 34 4.1 Tổng quan Valgrind 34 4.1.1 Công cụ Memcheck 35 4.1.2 Biên dịch chƣơng trình với Memcheck 37 4.1.3 Lệnh kiểm tra Memcheck 37 4.2 Phân tích heap chƣơng trình Valgrind 39 4.2.1 Rò rỉ nhớ 39 4.2.2 Sử dụng nhớ không đƣợc khởi tạo 40 4.2.3 Lỗi sử dụng không malloc/ new/ new[] với free/ delete/ delete[] 43 4.2.4 Thực nghiệm chƣơng trình có mã nguồn lớn 45 KẾT LUẬN 47 TÀI LIỆU THAM KHẢO 48 PHỤ LỤC A 49 PHỤ LỤC B 51 PHỤ LỤC C 55 DANH MỤC CÁC KÝ HIỆU VÀ CHỮ VIẾT TẮT Ký hiệu Thuật ngữ CFG Control Flow Graph CG Garbage Collection DFG Data Flow Graph SMT Satisfiability Modulo Theories SAT Satisfiability Testing DANH SÁCH HÌNH VẼ Hình 2.1 Biểu đồ Hasse biểu diễn giàn 11 Hình 2.2 Quan hệ thứ tự phần giàn 12 Hình 2.3 Quan hệ thứ tự phần giàn 12 Hình 2.4 Ví dụ giàn có chiều cao 13 Hình 2.5 Phép toán cộng giàn 14 Hình 2.6 Phép toán nâng (lift) giàn 14 Hình 2.7 Phép toán lift tập tạo thành giàn 14 Hình 2.8 Tính toán điểm cố định giàn 17 Hình 2.9 Giàn có chiều cao vô hạn 19 Hình 3.1 Quan hệ tƣơng đƣơng ràng buộc 26 Hình 3.2 Đồ thị heap 30 Hình 3.3 Đồ thị hình dạng heap sau vòng lặp 32 Hình 4.1 Kết ví dụ rò rỉ nhớ Memcheck 40 Hình 4.2 Kết ví dụ sử dụng nhớ chƣa đƣợc khởi tạo Memcheck sử dụng –track-origins 42 Hình 4.3 Kết ví dụ sử dụng nhớ chƣa đƣợc khởi tạo Memcheck không sử dụng –track-origins 43 Hình 4.4 Kết ví dụ lỗi sử dụng không malloc/new/new[] với free/delete/delete[] 44 MỞ ĐẦU Ngày với phát triển vƣợt bậc công nghệ thông tin, phần mềm có vai trò cốt lõi ngày chiếm vị trí quan trọng công nghệ thông tin mà đời sống kinh tế xã hội Vấn đề chất lƣợng phần mềm (software quality) chắn mối quan tâm thách thức xã hội đại ngày phụ thuộc vào dịch vụ máy tính đem lại Liên quan tới đảm bảo chất lƣợng phần mềm, khía cạnh quản lý nhớ đƣợc quan tâm Quản lý nhớ đƣợc chia làm hai giai đoạn phân bổ nhớ theo yêu cầu, giải phóng chƣơng trình không sử dụng Hiện nay, nhiều hệ thống ngôn ngữ lập trình sử dụng chế quản lý nhớ tự động, tiêu biểu nhƣ Java C# Trong Java, ngƣời lập trình không cần phải trọng đến phân bổ giải phóng nhớ Khi khối nhớ đƣợc phân bổ không đƣợc sử dụng máy ảo Java (Java Virtual Machine) tự giải phóng nhớ thông qua chế thu dọn rác tự động (Automatic Garbage Collection) [1] Thu gom rác tự động trình kiểm tra nhớ heap, xác định đối tƣợng đƣợc sử dụng không đƣợc sử dụng, xóa đối tƣợng không đƣợc sử dụng Chức GC (Garbage Collection) gồm hai bƣớc trừu tƣợng (trong thực tế hai pha đan xen nhau): Phát rác (tìm đối tƣợng từ đống rác cách đó) Cải tạo rác (Cải tạo lại ô nhớ đối tƣợng rác, chƣơng trình chạy sử dụng ô nhớ này) Tuy nhiên, số ngôn ngữ lập trình truyền thống, đƣợc sử dụng phổ biến thực tế nhƣ C, C++ vấn đề quản lý nhớ đƣợc đặt hoàn toàn vào lập trình viên [6] Lập trình viên tự động cấp phát nhớ, nhƣng khối không cần thiết, họ cần phải trả lại cho hệ thống lời gọi hàm hệ thống nhƣ free() Hậu ngƣời lập trình quên hoàn trả vùng cấp phát cho nhớ lại tiếp tục dùng lệnh cấp phát, lúc nhiều phần nhớ bị chiếm chỗ Điều dẫn tới lỗi liên quan tới nhớ, đặc biệt khối nhớ khởi tạo tự động trỏ hay mắc lỗi rò rỉ nhớ (memory leak) Quản lý nhớ quan trọng có nhiều khía cạnh nghiên cứu Các kỹ thuật thu dọn rác hƣớng tiếp cận vấn đề Mục tiêu luận văn tìm hiểu kỹ thuật phân tích chƣơng trình tĩnh, cập nhật xu hƣớng nghiên cứu nƣớc lĩnh vực phân tích chƣơng trình tĩnh, cải tiến kỹ thuật Cụ thể, luận văn tập trung vào hƣớng tiếp cận tìm hiểu kỹ thuật phân tích hình dạng nhớ heap chƣơng trình Kết kỹ thuật áp dụng khâu loại bỏ đối tƣợng rác Kỹ thuật dựa lý thuyết ngữ nghĩa chƣơng trình theo trỏ Lý thuyết giàn, ngữ nghĩa điểm cố định đƣợc sử dụng nhƣ tảng kỹ thuật Luận văn có cấu trúc nhƣ sau: Chƣơng giới thiệu tổng quan phân tích chƣơng trình tĩnh Trong chƣơng trình bày định nghĩa kỹ thuật phân tích chƣơng trình tĩnh, ứng dụng, điểm mạnh điểm yếu kỹ thuật Tiếp luận văn trình bày vài kỹ thuật phân tích chƣơng trình tĩnh phổ biến nay, toán kỹ thuật mà luận văn thực tìm hiểu Chƣơng trình bày tảng ngữ nghĩa chƣơng trình Chƣơng trình bày kỹ thuật phân tích hình dạng nhớ heap Đƣa toán, cách giải đánh giá Chƣơng thực nghiệm với công cụ Valgrind Cuối phần kết luận tài liệu tham khảo 43 Hình 4.3 Kết ví dụ sử dụng nhớ chưa khởi tạo Memcheck không sử dụng –track-origins 4.2.3 Lỗi sử dụng không malloc/ new/ new[] với free/ delete/ delete[] Ví dụ: Chương trình C ghi tệp mismath-mem.c { } 44 Đoạn ví dụ ta nhận thấy biến trỏ đƣợc phân bổ lệnh malloc, nhƣng giải phóng nhớ trỏ lại dùng lệnh delete thay lệnh free Các bước phân tích Valgrind sau: Bƣớc 1: Applications -> accessories -> terminal Bƣớc 2: cd dẫn vào thƣ mục chạy valgrind: cd Desktop Bƣớc 3: Lệnh tạo môi trƣờng để kiểm tra tệp mismath-mem.c gcc mismath -mem.c -o mismath -mem -g –Wall Bƣớc 4: Lệnh kiểm tra sử dụng nhớ không đƣợc khởi tạo valgrind mismath –mem –tool=memcheck show-mismatched-frees=yes Kết Memcheck sinh hình 4.4 cho ta thấy Hình 4.4 Kết ví dụ lỗi sử dụng không malloc/new/new[] với free/delete/delete[] / 45 Thông báo sử dụng không phù hợp malloc delete 4.2.4 Thực nghiệm chương trình có mã nguồn lớn Sau thực nghiệm chạy Valgrind tập chƣơng trình có mã nguồn tƣơng đối lớn có nhiều lỗi nhớ nhƣ sử dụng biến trỏ sau giải phóng, sử dụng khối nhớ khối nhớ đƣợc cấp phát, giải phóng hai lần khối nhớ đƣợc cấp phát Các bước phân tích Valgrind sau: Bƣớc 1: Applications -> accessories -> terminal Bƣớc 2: cd dẫn vào thƣ mục chạy valgrind: cd Desktop Bƣớc 3: Lệnh tạo môi trƣờng để kiểm tra tệp large-test.c gcc large-test.c -o large-test -g Bƣớc 4: Lệnh kiểm tra sử dụng nhớ không đƣợc khởi tạo valgrind –tool=memcheck –track-origins=yes / large-test Kết Memcheck sinh hình cho ta thấy Ta thấy hình cho lỗi sử dụng nhớ khối nhớ đƣợc cấp phát 46 Hình cho ta thấy lỗi sử dụng khối nhớ giải phóng lỗi giải phóng lần khối nhớ Tất có lỗi nhớ Valgrind thống kê đƣợc Trên ví dụ thực nghiệm Valgrind chƣơng trình có số lƣợng mã nguồn lớn có nhiều lỗi nhớ gặp phải, sau sử dụng valgrind để test lỗi chƣơng trình ta thấy đƣợc kết cụ thể lỗi nhớ vị trí lỗi nhớ dong lệnh mà chạy chƣơng trình 47 KẾT LUẬN Nội dung đạt đƣợc Đề tài tiếp cận tìm hiểu lý thuyết phƣơng pháp hình thức, cụ thể áp dụng phƣơng pháp phân tích chƣơng trình tĩnh vào giải toán kinh điển liên quan đến trỏ, tiến hành khảo sát cập nhật đƣợc xu giới phƣơng pháp hình thức, lĩnh vực ứng dụng kỹ thuật phát triển kiểm soát chất lƣợng phần mềm Luận văn tập trung chủ yếu vào nghiên cứu bản, tác giả trọng nghiên cứu lý thuyết việc xác định tính chất heap từ mã nguồn chƣơng trình Cuối cùng, dựa lý thuyết tìm hiểu tiến hành áp dụng cho toán phân tích hình dạng heap chƣơng trình thực nghiệm công cụ Valgrind Hạn chế Hiện việc áp dụng lý thuyết vào thực tế nhiều khó khăn, công cụ hỗ trợ hầu hết dừng mức thử nghiệm cho nghiên cứu Hƣớng phát triển Thực áp dụng, cải tiến lý thuyết để tăng khả ứng dụng Sử dụng công cụ mã nguồn mở có sẵn làm tảng để thực việc cải tiến đƣa vào ứng dụng thực tế 48 TÀI LIỆU THAM KHẢO [1] Buytaert D, Venstermans K, Eeckhout L, BosschereK D, Garbage Collection Hints ELIS Department, Ghent University – HiPEAC Member, St.-Pietersnieuwstraat 41, B-9000 Gent, Belgium [2] Cousot P (2001), Abstract interpretation based formal methods and futurechallenges, Lecture Notes in Computer Science 2000, (138–170) [3] Cousot P Abstract Interpretation Web page maintained by P Cousot, 2008 [4] Cousot P Constructive Design of a Hierarchy of Semantics of a Transition System by Abstract Interpretation In Electronic Notes in Theoretical Computer Science, Volume 6, 1997 [5] Clarke E.M, Grumberg O, Peled D.A (1999), Model Checking The MIT Press [6] Jon Rafkind, Adam Wick, John Regehr, Matthew Flatt Precise Garbage Collection for C [7] Julian Seward, Nicholas Nethercote Using Valgrind to detect undefined value errors with bit-precision [8] Nielson F., Nielson H.R., Hankin C (2004), Principles of Program Analysis, Springer [9] Rice H.G (1953), Classes of recursively enumerable sets and their decisionproblems, Transactions of American Math Society 74, (358-366) [10] Schwartzbach M.I (2008), Lecture notes on static analysis Technical report, BRICS, Dept of Computer Science - University of Aarhus [11] Sagiv M, Reps T, and Wilhelm R Parametric shape analysis via 3-valued logic ACM Transactions on Programming Languages and Systems (TOPLAS), 24(3):217–298, 2002 [12] Thomas Reps, Mooly Sagiv, Reinhard Wilhelm, Static Program Analysis via 3-Valued Logic* [13] http://valgrind.org/ [14] Wogerer W (2005), A Survey of Static Program Analysis Techniques, Technische Universitat Wien 49 PHỤ LỤC A Giải hệ phƣơng trình cho ví dụ thuật toán Andersen Ta có hệ phƣơng trình: { ⟦ ⟧ ⟦ ⟧ ⟦ ⟧ ⟦ ⟧ ⟦ ⟧ ⟦ ⟧ ⟦ ⟧ { ⟦ ⟧ } ⟦ ⟧ ⟦ ⟧ ⟦ ⟧ ⟦ ⟧ ⟦ ⟧ ⟦ ⟧ ⟦ ⟧ ⟦ ⟧ ⟦ ⟧ ⟦ ⟧ ⟦ ⟧ } ⟦ ⟧ ⟦ ⟧ Hệ phƣơng trình tƣơng đƣơng với: { } ⟦ ⟧ ⟦ ⟧ ⟦ ⟧ ⟦ ⟧ { } ⟦ ⟧ ⟦ ⟧ ⟦ ⟧ ⟦ ⟧ ⟦ ⟧ ⟦ ⟧ ⟦ ⟧ ⟦ ⟧ Hệ phƣơng trình tƣơng đƣơng với: { } ⟦ ⟧ ⟦ ⟧ ⟦ ⟧ ⟦ ⟧ { } ⟦ ⟧ ⟦ ⟧ ⟦ ⟧ ⟦ ⟧ 50 Hệ phƣơng trình tƣơng đƣơng với: { } ⟦ ⟧ { ⟦ ⟧ ⟦ ⟧ } ⟦ ⟧ Hệ phƣơng trình tƣơng đƣơng với: { { } } ⟦ ⟧ ⟦ ⟧ Kết ta thu là: ⟦ ⟧ { ⟦ ⟧ { } } 51 PHỤ LỤC B Giải hệ phƣơng trình cho ví dụ toán phân tích hình dạng nhớ heap Ta có hệ phƣơng trình ⟦ ⟧ { } ⟦ ⟧ { } ⟦ ⟧ { } ⟦ ⟧ { } ⟦ ⟧ ⟦ ⟧ ⟦ ⟧ ⟦ ⟧ ⟦ ⟧ ⟦ ⟧ ⟦ ⟧ ⟦ ⟧ ⟦ ⟧ Hệ phƣơng trình tƣơng đƣơng với: ⟦ ⟧ ⟦ ⟧ ⟦ ⟧ { ⟦ } ⟧ ⟦ ⟧ ⟧ { } ⟧ } { } ⟦ ⟧ ⟦ { } ⟧ } ⟦ { { } ⟦ { ⟦ { { } ⟧ } { } ⟦ 52 ⟧ { { ⟦ ⟧ } } ⟦ ⟧ { { ⟦ ⟧ } } ⟦ ⟧ ⟦ { { ⟧ } } ⟦ ⟧ ⟦ { { ⟧ } } ⟦ ⟧ ⟦ ⟧ { { } } ⟦ ⟧ ⟦ ⟧ { { } } ⟦ 53 ⟧ ⟦ ⟧ { { } } Hệ phƣơng trình tƣơng đƣơng với: ⟦ ⟧ ⟦ ⟧ ⟦ ⟦ ⟧ ⟦ ⟦ ⟧ ⟧ ⟦ ⟧ { } { } { } ⟧ ⟦ { ⟧ } ⟦ ⟧ ⟦ { ⟧ } ⟦ ⟧ ⟦ { ⟧ } ⟦ ⟧ { } ⟦ ⟧ { } ⟦ ⟧ { } ⟦ ⟧ 54 { } ⟦ ⟧ { } ⟦ ⟧ { } Kết thu là: { } 55 PHỤ LỤC C Chƣơng trình C đƣợc ghi tệp large-test.c có nội dung nhƣ sau: { { } { } 56 { } } { { { { } 57 { } } { { } } { { } } } } [...]... 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 29 3.2.1 Kỹ thuật phân tích Trong phân tích hình dạng bộ nhớ heap, đồ thị hình dạng shape graph dùng để mô tả hình dạng bộ nhớ heap Đồ thị hình dạng là đồ thị có hƣớng với nút là các con trỏ đích, cạnh là các... lập trình Có thể sinh ra nhiều lời cảnh báo lỗi không chính xác 1.4 Các kỹ thuật phân tích chƣơng trình tĩnh Những kỹ thuật phân tích chƣơng trình tĩnh đã và đang thu hút nhiều nghiên cứu trên thế giới, hiện có nhiều kỹ thuật nhƣng tựu chung có thể phân theo 4 nhóm chính nhƣ sau: Thứ nhất, kỹ thuật phân tích chƣơng trình tĩnh dựa trên phân tích luồng dữ liệu (data flow analysis) [8] [10] Phân tích. .. một số ngôn ngữ lập trình truyền thống, đƣợc sử dụng phổ biến trong thực tế nhƣ C, C++ thì vấn đề quản lý bộ nhớ vẫn đƣợc dựa hoàn toàn vào lập trình viên Liên quan tới bài toán này kỹ thuật phân tích chƣơng trình tĩnh của mảng các kỹ thuật kiểm chứng chƣơng trình là có tính ứng dụng và hiệu quả cao Và việc áp dụng kỹ thuật phân tích chƣơng trình tĩnh vào trong bài toán quản lý bộ nhớ sẽ là nội dung... Không đảm bảo hội tụ, vì phân tích mất rất nhiều thời gian để xác định áp dụng narrowing 2.2 Kết luận chƣơng Chƣơng nêu tổng quan về nền tảng lý thuyết của phân tích ngữ nghĩa chƣơng trình Trong chƣơng 3 luận văn sẽ giới thiệu về bài toán phân tích hình dạng và các kỹ thuật giải bài toán đó 23 CHƢƠNG 3 PHÂN TÍCH HÌNH DẠNG HEAP 3.1 Phân tích con trỏ Trong khoa học máy tính, phân tích con trỏ (pointer... một mô hình toán học mô tả các hành vi có thể của chƣơng trình đó Sau đây, luận văn giới thiệu một số thuật toán tìm điểm cố định: Thuật toán naive Thuật toán naive tìm điểm cố định x nhƣ sau: { } Thuật toán lặp chaotic Thuật toán lặp chaotic tìm điểm cố định chaotic nhƣ sau: { ; ; Thuật toán lặp 18 } Thuật toán work-list Một thuật toán tìm điểm cố định khác là thuật toán work-list, thuật toán này... nhóm các kỹ thuật liên quan để giải quyết bài toán trên 11 CHƢƠNG 2 LÝ THUYẾT NỀN TẢNG 2.1 Nền tảng phân tích ngữ nghĩa của chƣơng trình 2.1.1 Lý thuyết giàn Trong kỹ thuật phân tích chƣơng trình tĩnh của luận văn, các phân tích sử dụng cấu trúc toán học là Giàn (Lattices) [10], tập các thuộc tính (ví dụ: tập các biến, biểu thức trong chƣơng trình) cần thiết cho mỗi phân tích tĩnh trong chƣơng trình. .. trƣờng hợp } tƣơng ứng với thuật toán 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... hƣớng tới việc phân tích chƣơng trình tĩnh Cụ thể luận văn sẽ đi sâu tìm hiểu về một bài toán đặc trƣng trong phân tích chƣơng trình tĩnh và các hƣớng giải quyết của bài toán đó 1.3 Điểm mạnh và điểm yếu của phân tích chƣơng trình tĩnh Phân tích chƣơng trình tĩnh có một số ƣu điểm sau: Chỉ ra đƣợc chính xác vị trí lỗi trong chƣơng trình Lỗi đƣợc phát hiện sớm trong quy trình phát triển phần mềm nên... 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... luận văn này 1.2 Giới thiệu phân tích chƣơng trình tĩnh Phân tích chƣơng trình tĩnh là kỹ thuật xác định tính chất/ hành vi của một chƣơng trình mà không cần phải chạy chƣơng trình đó Có rất nhiều câu hỏi thú vị liên quan tới chƣơng trình hoặc các điểm (point) riêng lẻ trong chƣơng trình: Chƣơng trình có dừng hay không? Độ lớn có thể của vùng nhớ heap trong quá trình chạy nhƣ thế nào? Đầu ... để tìm đƣợc kết hình dạng cuối heap 29 3.2.1 Kỹ thuật phân tích Trong phân tích hình dạng nhớ heap, đồ thị hình dạng shape graph dùng để mô tả hình dạng nhớ heap Đồ thị hình dạng đồ thị có hƣớng... Các kỹ thuật phân tích chƣơng trình tĩnh Những kỹ thuật phân tích chƣơng trình tĩnh thu hút nhiều nghiên cứu giới, có nhiều kỹ thuật nhƣng tựu chung phân theo nhóm nhƣ sau: Thứ nhất, kỹ thuật phân. .. tích hình dạng kỹ thuật giải toán 23 CHƢƠNG PHÂN TÍCH HÌNH DẠNG HEAP 3.1 Phân tích trỏ Trong khoa học máy tính, phân tích trỏ (pointer analysis), hay gọi points – to analysis, kỹ thuật phân tích