2010-03-28 39 views
12

Tôi muốn tạo một tệp nhị phân được ánh xạ vào bộ nhớ; tuy nhiên tôi không chắc chắn làm thế nào để tạo ra các tập tin được ánh xạ vào hệ thống. Tôi đọc tài liệu nhiều lần và nhận ra có 2 tệp triển khai được ánh xạ, một tệp trong iostream và một trong interprocess.Có sự khác biệt nào giữa tệp iostream được ánh xạ và tăng tệp ánh xạ interprocess không?

Các bạn có biết cách tạo một tệp ánh xạ vào bộ nhớ dùng chung không? Tôi đang cố gắng để cho phép một chương trình đa luồng để đọc một mảng lớn gấp đôi được viết bằng một định dạng tập tin nhị phân. Ngoài ra sự khác biệt giữa các tập tin được ánh xạ trong iostream và interprocess là gì?

Trả lời

2

Theo như tôi có thể biết, iostreams sẽ đặt tệp ánh xạ vào bộ nhớ dùng chung (đây là những gì bạn muốn); Tuy nhiên, interprocess tuy nhiên đặt các tập tin trong không gian địa chỉ của một quá trình khác.

Bạn có thể sử dụng iostream trừ khi bạn có nhiều quy trình (không phải chuỗi) sẽ liên lạc với nhau theo một cách nào đó.

+0

Cảm ơn Joe đã làm rõ, tôi sẽ thử dùng iostream. – Yijinsei

+2

@ Joe D: đó không phải là ấn tượng tôi nhận được từ thư viện interprocess. Cụ thể, từ tài liệu: "hệ thống tạo một ánh xạ tệp để liên kết tệp và không gian địa chỉ của quá trình." Đối với nhiều quy trình, về cơ bản nó chia sẻ bộ nhớ với một bản sao lưu hệ thống tập tin. – rcollyer

+0

Có, nhưng thư viện interprocess, không tạo bản sao lưu hệ thống tệp, nó chỉ đơn giản là ánh xạ tệp trong bộ nhớ chia sẻ liên bộ. Tuy nhiên iostreams, sẽ ánh xạ nó vào bộ nhớ cho một quá trình duy nhất. Mà có lẽ là (tôi đã không kiểm tra việc thực hiện) hiệu quả hơn. –

0

Sự khác biệt chính mà tôi thấy giữa hai cách là cách chúng được sử dụng. Trong boost-interprocess, để sử dụng tệp ánh xạ bộ nhớ, bạn tạo các đối tượng trong không gian bộ nhớ đó bằng cách sử dụng vị trí new và các đối tượng đó sẽ tự động liên tục ở dạng nhị phân trong tệp của bạn. Các quy trình khác sau đó có thể ánh xạ cùng một tệp và sử dụng các đối tượng đó hoặc chính chương trình có thể sử dụng nó làm bộ nhớ cache liên tục và tải lại chúng sau này. Các tệp ánh xạ bộ nhớ trong boost-iostreams hoạt động giống như các luồng tệp, với các lợi ích bổ sung là boost::iostream và sẽ cung cấp ngữ nghĩa luồng cho giao tiếp giữa các quá trình.

Đối với một quá trình, không có nhiều lợi ích khi sử dụng các tệp ánh xạ bộ nhớ boost::iostream. Tuy nhiên, nó có thể làm giảm độ trễ khi làm việc với tệp vì nó sẽ được tải vào bộ nhớ. Tuy nhiên, bạn chỉ nhận được lợi ích này nếu bạn liên tục viết lại các phần của tệp. Đối với một lần đọc/ghi pass của tập tin, có thể không có bất kỳ tăng tốc nào.

Các vấn đề liên quan