2008-11-04 38 views
8

Tôi đã có một mong muốn cho một container STLish mà tôi có thể đặt vào một phân đoạn bộ nhớ chia sẻ hoặc một tập tin ánh xạ bộ nhớ.Bất cứ ai có một bộ nhớ chia sẻ bộ nhớ tốt cho C + +?

Tôi đã xem xét việc sử dụng trình phân bổ tùy chỉnh và vị trí mới để đặt vùng chứa STL thông thường vào phân đoạn bộ nhớ dùng chung. (như thế này ddj article). Vấn đề là các container STL sẽ nội bộ có các con trỏ tới bộ nhớ mà chúng sở hữu. Vì vậy, nếu phân đoạn bộ nhớ chia sẻ hoặc bộ nhớ ánh xạ tập tin tải tại một địa chỉ cơ sở khác nhau (có lẽ trên một chạy tiếp theo, hoặc trong một quá trình thứ hai), thì con trỏ nội bộ đột nhiên không hợp lệ. Theo như tôi có thể tìm ra, cách tiếp cận phân bổ tùy chỉnh chỉ hoạt động nếu bạn luôn có thể ánh xạ phân đoạn bộ nhớ vào quá trình của bạn tại cùng một địa chỉ. Ít nhất với các tập tin bản đồ bộ nhớ, tôi có rất nhiều kinh nghiệm mà KHÔNG phải là trường hợp nếu bạn chỉ để cho hệ thống bản đồ nó ở đâu nó cảm thấy như thế nào.

Tôi đã có một số suy nghĩ về cách thực hiện điều này, nhưng tôi muốn tránh nó nếu ai đó đã thực hiện công việc (đó là tôi, lười biếng).

Tôi hiện đang rời khỏi khóa khỏi cuộc thảo luận, vì chiến lược khóa tốt nhất phụ thuộc nhiều vào ứng dụng.

Trả lời

12

Điểm khởi đầu tốt nhất cho điều này có lẽ là các thư viện Interprocess tăng cường. Chúng có ví dụ điển hình về bản đồ trong bộ nhớ dùng chung tại đây: interprocess map

Có thể bạn cũng muốn đọc phần con trỏ thông minh bù trừ, giải quyết vấn đề con trỏ bên trong mà bạn đang đề cập đến. Offset Pointer

+1

Tôi hỗ trợ câu trả lời này bằng trải nghiệm cá nhân. Hướng dẫn trực tuyến được thực hiện bằng cách sử dụng IPC thật dễ dàng! www.boost.org/doc/libs/1_36_0/doc/html/interprocess/quick_guide.html www.boost.org/doc/libs/1_36_0/doc/html/interprocess/sharedmemorybetweenprocesses.html#interprocess.sharedmemorybetweenprocesses.mapped_file – pestophagous

0

Tôi luôn có những trải nghiệm tốt (năm trước) với ACE. Đó là một khuôn khổ mạng/giao tiếp, nhưng có một phần trên bộ nhớ chia sẻ.

0

Tôi chỉ biết các phiên bản độc quyền. BloombergEA đều đã xuất bản về các phiên bản STL của chúng, nhưng không phát hành (theo hiểu biết của tôi) về thành quả lao động của chúng.

+0

Thật sai lầm khi mô tả đặc điểm của các thư viện "BDE" Nhóm của Lakos phát triển tại Bloomberg như là một "phiên bản STL" - các giao diện và sự thỏa hiệp khác nhau một cách cực kỳ khác biệt. –

-1

Hãy thử sử dụng QSharedMemory Thực hiện Qt của Qt.

+0

Tôi chỉ nhìn vào QSharedMemory - nó chỉ cho phép truy cập bộ nhớ chia sẻ, nó không cung cấp bất kỳ loại container nào. –

+0

đã đồng ý. Lỗi của tôi. Tôi hv thực hiện một hàng đợi tin nhắn kích thước cố định trên nó. –

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