Tôi có một chương trình C++/Linux, trong vòng 2-3 giây sau khi chạy bắt đầu khạc nhổ lỗi std::bad alloc
trên RAM 32GB (và được khởi động lại bởi trình bao bọc). Những gì tôi thực sự quan tâm là giải quyết vấn đề này, nhưng tôi muốn đi từng bước và xây dựng sự tự tin của tôi trong sự hiểu biết của tôi về vấn đề này.nhận std :: bad_alloc error; Làm thế nào để xác minh chéo rằng hệ điều hành thực sự đang hết bộ nhớ
Có vẻ như hệ thống không thể cấp phát bộ nhớ cho yêu cầu new
(điều này sẽ xảy ra khi hệ điều hành hết bộ nhớ). Trong khi chương trình đang chạy, trên một thiết bị đầu cuối khác, tôi chạy lệnh sar
với khoảng thời gian nhỏ nhất có thể (1 giây), nhưng tôi thấy rằng kbcached
là ~ 24GB bộ nhớ. Tại sao hệ điều hành không thể giải phóng bộ nhớ đệm và làm cho bộ nhớ đó có sẵn cho yêu cầu new
? Hoặc 1 giây là quá nhiều thời gian (so với các chương trình chạy nhanh như thế nào) hoặc tôi đang làm điều gì sai ở đây.
Về cơ bản tôi muốn xác minh chéo và xác định rằng hệ điều hành thực sự hết bộ nhớ và do đó không thể cấp phát bộ nhớ và sau đó thực hiện mọi thứ từ thời điểm này. Làm thế nào để làm nó?
Lý tưởng nhất, tôi muốn có số liệu thống kê hệ thống ngay tại thời điểm khi cấp phát bộ nhớ thất bại, giống như bao nhiêu bộ nhớ đệm, tổng sử dụng hết bộ nhớ vv
Chỉ cần một lưu ý .. nó không có gì để làm với cách bạn có RAM, nó phụ thuộc vào bao nhiêu bộ nhớ miễn phí có mặt trong quá trình không gian địa chỉ bộ nhớ ảo. Tôi không biết lệnh để kiểm tra quá trình cấp phát bộ nhớ ảo mặc dù. – Naveen
Tôi đoán điều này sẽ là hệ điều hành cụ thể. – sharptooth
Quy trình của bạn đã phân bổ bao nhiêu bộ nhớ? Quy trình của bạn có những ràng buộc gì? Có 32 bit không? –