Tôi đang sử dụng một số std::deque
để lưu trữ số lượng đối tượng khá lớn. Nếu tôi loại bỏ một loạt các đối tượng, nó xuất hiện với tôi rằng việc sử dụng bộ nhớ của nó không giảm, trong một thời trang tương tự như std :: vector.Làm thế nào để phát hành bộ nhớ từ std :: deque?
Có cách nào để giảm bớt không? Tôi biết rằng trong một vector bạn phải sử dụng 'thủ thuật trao đổi', mà tôi giả định cũng sẽ làm việc ở đây, nhưng tôi muốn tránh điều đó vì nó sẽ yêu cầu sao chép tất cả các phần tử còn lại trong thùng chứa (và do đó yêu cầu bạn có đủ bộ nhớ để lưu trữ mọi đối tượng hai lần). Tôi không quen thuộc với việc thực hiện deque, nhưng sự hiểu biết của tôi về nó là nó có thể có thể đạt được một điều như vậy mà không có nhiều bản sao (trong khi với một vector rõ ràng là không).
Tôi đang sử dụng VC++ (Dinkumware) STL, nếu điều đó tạo ra bất kỳ sự khác biệt nào.
Bạn đã thiết lập rằng việc triển khai deque của bạn chưa giải phóng các khối bộ nhớ ngay sau khi đủ các mục được xóa để xóa chúng? Hay là bạn thực sự muốn nén vài byte cuối cùng bằng cách tái phân bổ khối ở mỗi đầu? –
Tôi nghĩ vậy, theo cách khá thô lỗ và sẵn sàng: tôi thêm 100.000 mục -> Mức sử dụng bộ nhớ ~ 90MB. Tôi thêm 100.000 -> sử dụng bộ nhớ khác là ~ 170MB. Tôi xóa 100.000 mục -> sử dụng bộ nhớ vẫn còn ~ 170MB. Thêm 100.000 -> vẫn còn 170. Tôi giả định 100.000 mặt hàng là quá đủ để nó có các khối trống mà nó sẽ được giải phóng nếu nó sắp sửa. – Peter
Sử dụng bộ nhớ của quá trình hoặc sử dụng bộ nhớ của bộ sưu tập? Chỉ vì bộ sưu tập giải phóng bộ nhớ không có nghĩa là nó quay trở lại hệ điều hành, vì vậy hãy thử phân bổ 80MB mảng char sau khi loại bỏ các mục và xem liệu việc sử dụng có đến 250MB hay vẫn ở mức 170. Xin lỗi nếu bạn đã biết tất cả điều này công cụ và đã chiếm nó - hàng triệu người sẽ không. –