2013-05-25 26 views
6

Tôi đã tìm thấy rằng tăng :: property_tree :: ptree có chi phí bộ nhớ khổng lồ. Ước tính của tôi là một ptree rỗng là khoảng 150 byte, và, bất kỳ mục nhập nào trong ptree đều thêm ít nhất 150 byte khác. Điều này khiến chúng ta không thể sử dụng cho cây có hàng ngàn mục.chi phí bộ nhớ cho tăng :: property_tree :: ptree

Ước tính của tôi có bị tắt không? Có cách nào để giữ cho chi phí thấp không?

Trả lời

1

Boost.PropertyTree về cơ bản không phải là nhanh hoặc trọng lượng nhẹ trình phân tích cú pháp.
Nó tập trung vào việc cung cấp sự tiện lợi và chức năng cao cấp, vì vậy nó không được xây dựng để có hiệu quả, tôi đoán vậy.

Bạn có thể thấy this thread trong danh sách gửi thư nâng cao cho một câu hỏi tương tự.

tôi muốn đề nghị rằng một sự thay thế của Boost.PropertyTree có thể là một trong hai:

  • một phân tích cú pháp SAX - đây là một cách tiếp cận khác để phân tích cú pháp XML. Nó giống như đối lập với trình phân tích cú pháp DOM; nó phân tích từng nút XML một. Thông thường, "cấp phát bộ nhớ cho toàn bộ tệp lúc bắt đầu" xảy ra trong trình phân tích cú pháp DOM, nhưng nó sẽ không xảy ra trên các trình phân tích cú pháp SAX.
  • an trình phân tích cú pháp tùy chỉnh cấp phát + người dùng được xác định pool bộ nhớ - bạn có thể định cấu hình trình phân bổ của trình phân tích cú pháp đó để trỏ nhóm bộ nhớ ổn định. Nó có thể chỉ đơn giản là một bộ đệm lớn của bộ nhớ được phân bổ trước, một hồ bơi nhận dạng phân mảnh, hoặc thậm chí một tập tin bản đồ bộ nhớ, ...
Các vấn đề liên quan