Tôi đang tìm cách cải thiện bộ thu gom rác D bằng cách thêm một số chẩn đoán để tránh việc thu gom rác thải không có khả năng dẫn đến việc giải phóng đáng kể. Một heuristic tôi muốn thêm là GC không nên chạy nhiều hơn một lần cho mỗi khoảng thời gian X (có thể một lần mỗi giây hoặc lâu hơn). Để thực hiện việc này, tôi cần bộ hẹn giờ có các thuộc tính sau:Bộ hẹn giờ nhanh, đa nền tảng?
Phải có thời gian chính xác với chi phí tối thiểu. Gọi số
core.stdc.time
mất một khoảng thời gian tương đương với phân bổ bộ nhớ nhỏ, do đó, nó không phải là một lựa chọn tốt.Lý tưởng nhất, nên là nền tảng chéo (cả hệ điều hành và CPU), để bảo trì sự đơn giản.
Độ phân giải siêu cao không quá quan trọng. Nếu thời gian chính xác có thể là 1/4 trong một giây, điều đó là đủ tốt.
Phải hoạt động trong ngữ cảnh đa luồng/đa CPU. Hướng dẫn x86
rdtsc
sẽ không hoạt động.
EDIT: Hàm C cũ đơn giản clock()
có vẻ đủ nhanh. Tuy nhiên, ở đây tràn là một vấn đề. Trên Windows và Linux 32 bit, clock_t
được định nghĩa là số nguyên có ký hiệu 32 bit. Khi nó tràn, nó có trở thành tiêu cực hay không, hoặc chức năng clock()
có sử dụng logic bổ sung để làm cho nó được bọc bằng không? Nếu nó kết thúc tốt đẹp bằng không, thì điều này sẽ thực hiện thủ thuật. Nếu nó kết thúc thành tiêu cực (cũng đại diện cho mã lỗi, vv) thì nó sẽ không hoạt động.
Chỉnh sửa # 2: Tôi đã thử phương pháp heuristic bằng cách nào đó, sử dụng clock()
và bỏ qua vấn đề tràn, giống như thử nghiệm. Nó hoạt động rất kém đến nỗi nó không đáng để điều tra thêm.
Tôi không muốn báo động bất kỳ ai, nhưng tôi đã đọc một số bài viết về vấn đề QueryPerformanceCounter trên Windows (StopWatch sử dụng nó trong quá trình triển khai). Chỉnh sửa: Tôi tiếp tục quên nhấn shift + enter và tôi kết thúc đăng .. Xin lỗi. Dưới đây là một vài điều: http://support.microsoft.com/kb/895980 http://www.virtualdub.org/blog/pivot/entry.php?id=106 https: // jongampark.wordpress.com/2008/04/19/weirdness-of-the-high-resolution-counter-ie-queryperformancecounter/ –
Đây là một số khác: http://www.mindcontrol.org/~hplus/pc-timers. html –
Tôi sẽ xem xét các liên kết này sau, nhưng theo như tôi biết, 'QueryPerformanceCounter' hoạt động tốt cho công cụ định thời gian. Nó đang cố gắng sử dụng nó để có được thời gian hiện tại là một vấn đề lớn. Nếu bạn cố gắng và làm điều đó, kết quả của bạn trôi dạt, rõ ràng là xấu. –