Một cách khác lấy thời gian thực
Trang 1Một cách khác lấy thời gian thực
Nguyễn Xuân Tài
Khi viết một chương trình xong,điều quan trọng nhất là nó phải chạy đúng và thứ hai là thời gian thực hiện Vìvậy cần phải theo dõi thời gian chạy của chương trình và khả năng tối ưu nó Nhưchúng ta đã biết ở các số báo trước có giới thiệu một số cách lấy thời gianthực của máy tính để nhằm theo dõi và đánh giá hiệu quả của chương trình
Nhưng các cách được nêu đều cónhược điểm
Nhược điểm của cách 1 đã được nêucụ thể còn nhược điểm chính của cách 2 là phải dùng
4 byte bộ nhớ cho biến Timetrong dòng lệnh sau:
Var
Time: longint absolute 0: $ 46c;
Nhiều khi trong lúc lập trình bạnphải thốt lên: Giá như có thêm 2 biến đếm nữa thì hay biết mấy! Thưa cácbạn, không có lý do gì để cho biến Time giữ khư khư lấy 4 byte quý giá củachúng ta nữa sau khi bạn đọc xong bài này Vì chúng ta có thể lấy thời gianbằng một cách rẻ tiền hơn nhiều Vâng, chúng tôi muốn nói đến mảng Meml
Có một điều xưa như trái đấtrằng: hệ điều hành dành bốn byte bộ nhớ bắt đầu từ địa chỉ
$0000:$46c để lưutrữ nhịp làm việc của máy tính Và vấn đề nằm ở chỗ đó mảng Meml
là mảng chophép ta truy xuất bốn byte bộ nhớ bắt đầu từ một địa chỉ xác định Vì thế tạisao ta lại khai báo một biến time nữa Chắc chắn đến đây các bạn đã hiểu cáchlàm của tôi Nếu còn chỗ nào chưa được rõ, xin bạn hãy tham khảo chương trìnhngắn sau:
Uses crt;
Var
count:longint;
timesaved:longint;
begin
clrscr;
timesaved:=meml[0:$46c];
for count:=1 to 10000000 do
Trang 2end;
writeln(Total timeused:,((meml[0:$46c]-timesaved)/18.21):10:10,seconds.);
write(Total CPU clock:,meml[0:$46c]-timesaved,.);
readln;
end
Ở đây, tôi khuyến nghị lấy mộtgiây là 18.21 nhịp đồng hồ để tăng độ chính xác Nếu muốn có thể lấy chính xáchơn nữa nhưng thiết nghĩ như vậy là đủ và lại dễ nhớ
Nguyễn Xuân Tài