2011-08-16 22 views
7

Tôi đang cố sử dụng phân đoạn giống mmap để phân bổ các đối tượng trên các vùng chứa stl, vì tôi đang sử dụng boost :: interprocess cung cấp với ánh xạ bộ nhớ, phân bổ và bộ nhớ ẩn danh hỗ trợ lập bản đồ.
Một chút giống như thisboost :: phân bổ bộ nhớ interprocess trên phân đoạn ẩn danh

Vấn đề của tôi là anonymous_shared_memory chức năng here lợi nhuận cái gì đó trông tập tin nửa ánh xạ và bộ nhớ nửa chia sẻ (có ý nghĩa với mmap :)) và mặc dù cả hai phong cách làm việc với interprocess allocators một điều này có vẻ như còn thiếu của nó một segment_manager thực hiện phân bổ đoạn thực tế.
Vì nó trả về một mức cao mapped_region đã được ánh xạ trong quá trình nhưng không có người quản lý và không có cách nào mà tôi có thể thấy để móc trong một segment_manager.

+0

Nếu 'anonymous_shared_memory' không phù hợp với các trình phân bổ interprocess giao thức mong đợi, nó giống như một lỗi. Tôi khuyên bạn nên thử báo cáo nó. –

Trả lời

3

A mapped_region là đối tượng cấp thấp đến trung cấp và nghĩa đen chỉ đại diện cho bộ nhớ. Managed shared memory, tuy nhiên

là một lớp tiên tiến kết hợp một đối tượng bộ nhớ chia sẻ và một vùng ánh xạ bao gồm tất cả các đối tượng bộ nhớ chia sẻ,

vì vậy nó là bộ nhớ quản lý mà có những segment_manager.

Cho rằng bạn muốn sử dụng anonymous_shared_memory, trước tiên bạn sẽ nhận được các memory_region theo ví dụ này, sau đó bạn sẽ sử dụng vị trí new để đặt một segment_manager tại của nó. constructor của nó chiếm kích thước của phân đoạn bộ nhớ mà nó đang được xây dựng. Tôi không biết nếu điều này bao gồm kích thước của người quản lý, mặc dù tôi nghi ngờ nó được bao gồm.

+0

@Arkaitz, bạn đã thử cái này chưa? Bạn có muốn tôi kết hợp một số mã cho nó không? – rcollyer

+0

hãy làm; nó sẽ rất hữu ích! –

+0

@ EiyrioüvonKauyf nó đã là một _very_ thời gian dài kể từ khi tôi nhìn vào điều này, vì vậy nếu tôi không đăng mã cuối tuần này cho nó, chọc tôi một lần nữa. – rcollyer