6

Có cách nào tiêu chuẩn (ish) cho một thông dịch viên Perl (hay còn gọi là "perl") để hoạt động khi nó hết bộ nhớ? Có tài liệu/specced-out trong bất kỳ cách nào? Mã hóa một cách thống nhất?Có cách nào tiêu chuẩn để perl hoạt động khi hết bộ nhớ?

Tôi đặc biệt quan tâm đến bất kỳ tiêu chuẩn nào được thể hiện dưới dạng giao ước với mã Perl đang chạy - ví dụ: die có được gọi không? Sẽ END khối được thực hiện? Vv ...

Tôi ổn với cả câu trả lời "lý thuyết" (ví dụ: một số loại chung chung "đây là mã perl mã nên làm nói chung trên tài liệu tuyên bố nhiệm vụ" của Larry/P5P/etc ..., ngay cả khi không phải 100% các cuộc gọi malloc() tuân theo quy tắc này); hoặc câu lệnh "thực tế" (ví dụ: tất cả các cuộc gọi malloc() trong Perl được bao bọc thành một hàm "allocate_memory" chung để xử lý thống nhất tất cả các lỗi). Có thể câu trả lời phụ thuộc vào những gì cụ thể gây ra bộ nhớ (ví dụ: yêu cầu thêm bộ nhớ cho cấu trúc dữ liệu của mã Perl so với bộ nhớ được cấp bởi mã Perl nội bộ không liên quan đến logic "cần lưu trữ nhiều dữ liệu" hơn) trong chương trình Perl).

Nếu câu trả lời cực kỳ phụ thuộc vào thực thi, giả sử perl cho Solaris/Linux và thu hẹp xuống bất kỳ phiên bản ổn định nào gần đây (5.8 đến 5.16) là chấp nhận được.

Câu hỏi được giới hạn trong trình thông dịch Perl chuẩn, tuy nhiên bạn muốn xác định cấu hình trước khi biên dịch (ví dụ: perl đi kèm với bản phân phối Linux chính, hoặc được biên dịch với tất cả mặc định.).

Chú ý: Câu hỏi này ra khỏi bình luận Gilles để another Q

Trả lời

6

Lấy một cái nhìn tại các manual page for the various diagnostic warnings rằng Perl sẽ phát hành khi "chẩn đoán sử dụng" pragma được kích hoạt, bạn có thể xem các loại khác nhau khác nhau của "ra bộ nhớ "lỗi và ý nghĩa của chúng.

Vì vậy, bạn có thể phỏng đoán hành vi "chuẩn" từ các thư này; ("! Hết bộ nhớ") một với một dấu chấm than âm thanh như một trong những bạn đang yêu cầu về: "Một lỗi rất nghiêm trọng (nontrappable)"

Out of memory! 
(X) The malloc() function returned 0, indicating there was 
insufficient remaining memory (or virtual memory) to satisfy the 
request. Perl has no option but to exit immediately. 

An "X" lỗi cấp được dán nhãn là

Tuy nhiên nếu đó là một "yêu cầu lớn" (lớn hơn 64K) thì nó có thể tra cứu được (tôi đoán Perl giả định rằng nó sẽ có đủ bộ nhớ để tắt máy).