Tôi có một chương trình mà tôi muốn lưu trữ dữ liệu nhất định (khối được phân bổ động), trên đĩa để giảm mức sử dụng bộ nhớ và độ bền.Phân bổ bộ nhớ động dựa trên đĩa
Suy nghĩ đầu tiên của tôi là viết trình phân bổ tùy chỉnh của riêng tôi đã quản lý nội dung tệp trên đĩa, nhưng tôi cũng muốn xem các lựa chọn thay thế nào.
Tôi đã xem xét các bộ phân bổ bộ nhớ tùy chỉnh và các chủ đề về tuần tự hóa đối tượng nhưng có những khác biệt tinh tế, cả tốt lẫn xấu, khi điều chỉnh các nguyên tắc đó để quản lý không gian địa chỉ của tệp.
Trong tình huống này:
Memory được truy cập chỉ qua IO (đọc/ghi) chức năng hơn là trực tiếp
Không đối tượng (phương pháp/con trỏ) được lưu trữ, chỉ có dữ liệu.
Kích thước của một tập tin không phải là tĩnh, vì vậy nó sẽ tăng trưởng khi cần thiết chứ không phải là lớn và tĩnh
Đối với công dụng của tôi, nó có thể chấp nhận để tái bản đồ con trỏ hiện sau khi chống phân mảnh
Do dữ liệu không có kích thước cố định, hầu hết các triển khai cơ sở dữ liệu dường như không phù hợp.
Tôi hỏi, cách tiếp cận tốt nhất cho vấn đề này là gì? Tôi có nên thực hiện một bộ cấp phát bộ nhớ đơn giản mà xử lý một tập tin như đống?
Để tham khảo, hãy sử dụng C++ trên thiết bị được nhúng.
Chỉnh sửa: Tôi đã triển khai trình quản lý bộ nhớ của riêng mình sử dụng phân bổ bộ nhớ buddy và kích thước khối quyền hạn của hai. Tôi hài lòng rằng nó là chính xác và không bị rò rỉ, kết hợp các khối miễn phí, và có thể làm một 'ngăn chặn thế giới' chống phân mảnh.
Vấn đề là, như mong đợi, có khá nhiều phân mảnh bên trong và bên ngoài. Tôi không phải là một chuyên gia trong lĩnh vực này và mặc dù tôi thấy nó hấp dẫn (tôi vẫn còn là một sinh viên), tôi tự hỏi nếu có bất kỳ triển khai khác đã làm điều tương tự hoặc tương tự? Chắc chắn tôi không thể là người duy nhất?
Một số chủ đề hữu ích nhưng cho đến nay không tương thích là:
mmap tbh tôi havent đã qua sử dụng mmap nhưng, nó đề cập đến tập tin IO, nhưng không phải là quản lý không gian địa chỉ tập tin.
BOOST:serialization Tôi có một (có lẽ không được điều chỉnh) miễn cưỡng sử dụng thư viện tăng cường vào lúc này.
STXXL địa chỉ bộ nhớ kích thước Thú vị nhưng doesnt biến phân bổ
Doug Lea Memory Allocator Có những hiểu biết rất tốt vào các vấn đề với allocators bộ nhớ, nhưng tôi không ở một vị trí để thử và làm cho thực hiện của riêng tôi
+1, để đề cập đến SQLite, một thư viện tuyệt vời của nó và tôi sử dụng nó rất nhiều. Nhưng SQLite không xử lý các mẫu sử dụng mà tôi sau khi tốt. Đó là số lượng lớn dữ liệu có kích thước tùy ý hoàn toàn (không phải bản ghi cố định). Khi kích thước tệp phát triển (GB +), việc triển khai SQLite sẽ bị ngừng lại. – Akusete
@Akusete làm điều đó? Tôi nhớ nhập một bãi chứa en.wikipedia trong cơ sở dữ liệu sqlite và nó vẫn hoạt động khá tốt ... – CAFxX
@CAFxX: Câu hỏi hay. Đây là một tuyên bố giai thoại dựa trên việc sử dụng SQLite với các lược đồ phức tạp (100GB +) rất lớn. Tôi giả định rằng vì tôi chỉ cần lưu trữ các đốm màu, có cơ sở dữ liệu sql (thậm chí sqlite) sẽ phải chịu tải không cần thiết và tối ưu phụ, nhưng tôi cho rằng trong tầm nhìn là một giả định yếu. Ngoài ra, tôi đã là sinh viên cố gắng để thực hiện một công cụ cơ sở dữ liệu, do đó, sao lưu lưu trữ blob của nó với SQLite có vẻ giống như một cảnh sát. :) – Akusete