Söï phaân chia boä nhôù trong thôøi gian thöïc thi cho vuøng maõ cuûa chöông trình vaø vuøng döõ lieäu. Khoâng phaûi taát caû caùc ngoân ngöõ laäp trình ñeàu duøng stack ñieàu khieån vaø[r]
(1)CHƯƠNG 7
QUẢN LÝ BỘ NHỚ TRONG THỜI GIAN THỰC THI
7.1 Các phần tử yêu cầu cấp phát nhớ thời gian thực thi Tất phần tử cần cấp phát nhớ, bao gồm:
1 Đoạn mã chương trình biên dịch
2 Các chương trình hệ thống cần thiết thời gian thực thi Cấu trúc liệu người sử dụng định nghĩa
4 Các điểm trở chương trình Môi trường tham khảo
6 Các vị trí nhớ tạm cho việc tính trị biểu thức Nhập, xuất đệm
8 Các bảng, trạng thái thông tin
Ngồi liệu chương trình biên dịch, tác vụ cần nhớ:
1) Gọi chương trình tác vụ trở 2) Khởi tạo hủy bỏ cấu trúc liệu
(2)7.2 Các vấn đề ngơn ngữ nguồn Chương trình con
Mơ 7.1 Chương trình Pascal đọc xếp thứ tự các số nguyên (1) (2) (3) (4) (5) (6) (7) (8) (9) (10) (11) (12)
program sort (input, output);
var a: array [0…10];
procedure readarray;
var i: integer;
begin
for i := to read (a [1]);
end;
function partition (y, z: integer): integer;
var i, j, x, v: integer;
begin …
end;
(3)(13) (14) (15) (16) (17) (18) (19) (20) (21) (22) (23) (24) (25)
var i: integer;
begin
if (n > m) then begin
i := partition (m, n);
quicksort (m, i – 1); quicksort (i + 1, n);
end;
end;
begin
a[0] := -9999; a[10] := 9999; readarray;
quicksort (1, 9);
(4)Cây hoạt động (activation tree)
Cây hoạt động dùng để miêu tả đường mà điều khiển vào khỏi hoạt động chương trình Một số tính chất
cây hoạt động:
1 Mỗi nút tượng trưng cho hoạt động chương trình
2 Nút gốc (root) tượng trưng cho hoạt động chương trình Nút a cha nút b dòng điều khiển từ hoạt động a sang hoạt động b
(5)Mô 7.2 Các phát biểu in chương trình mơ 7.1 miêu tả thực thi nó.
Sự thực thi chương trình bắt đầu vào readarray
ra khỏi readarra
vào quicksort (1,9) vào partition (1,9) khỏi partition (1,9)
vào quicksort (1,3) ……
ra khỏi quicksort (1,3) vào quicksort (5,9) ……
(6)Thí dụ 6.1
s: viết tắt cho sort p: viết tắt cho partition r: viết tắt cho readarray q: viết tắt cho quicksort
S q(1,9) q(1,3) r
q(5, 9)
p(1,9) q(7,9)
p(5,9) q(5,5)
p(7,9) q(7,7) q(2,3)
p(1,3)
q(1,0)
q(3,3) p(2,3) q(2,1)
(7)Stack điều khiển (Control stack) S
r q(1,9)
p(1,9)
q(1,3)
p(1,3) q(2.3)
q(1,0)
(8)• Tầm vực khai báo
Khai báo tường minh, Var I: integer khai báo ngầm Fortran, ta dùng tên biến i mà không khai báo, Fortran hiểu i biến nguyên Tầm ảnh hưởng khai báo quy tắc tầm vực định
• Sự ràng buộc tên
Môi trường tên hàm, ánh xạ tên đến vị trí nhớ trạng thái hàm ánh xạ từ vị trí nhớ đến trị mà lưu giữ
tên vị trí nhớ trị
Hình 7.3 Phép chiếu hai mức từ tên đến trị
(9)Bảng 7.1 Các khái niệm tĩnh động chương trình con
7.3 Tổ chức ký ức
Sự phân chia nhớ thời gian thực thi
Trong thời gian dịch, trình biên dịch tính tốn kích thước nhớ dành cho chương trình đối tượng, bao gồm:
1 Mã chương trình đối tượng Các đối tượng liệu
3 Một phần stack điều khiển (stack trung tâm) lưu giữ ghi hoạt động chương trình
Khái niệm tĩnh Bản động
Định nghĩa chương trình Sự hoạt động chương trình Khai báo tên Sự ràng buộc tên với vị trí nhớ
(10)Mơ 7.2 Sự phân chia nhớ thời gian thực thi cho vùng mã chương trình vùng liệu.
Khơng phải tất ngơn ngữ lập trình dùng stack điều khiển heap, Pascal C dùng hai
Bản ghi hoạt động (Activation record) 1 Vùng giá trị khứ hồi
2 Vuøng thông số
3 Đường liên kết động 4 Đường liên kết tĩnh 5 Các trạng thái máy 6 Vùng liệu cục bộ 7 Vùng nhớ tạm
Mã chương trình đối tượng Dữ liệu tĩnh