Код: Выделить всё
offset_t offset = custom_malloc(sizeof(std::vector));
uint8_t *ptr = shared_memory_base_ptr + offset;
std::vector *shared_vector = new (ptr) std::vector();
shared_vector->push_back('S');
shared_vector->push_back('h');
shared_vector->push_back('a');
< /code>
Чтобы прочитать вектор из второго процесса, я использую следующее: < /p>
const uint8_t *ptr = shared_memory_base_ptr + offset;
const std::vector *shared_vector = reinterpret_cast(ptr);
std::cout size() at (i)
Есть ли это способ преодолеть? Как второй процесс может знать правильные адреса для векторных элементов?[code]template
class CustomAllocator
{
public:
using value_type = T;
CustomAllocator() noexcept {}
T *allocate(std::size_t n) {
const offset_t offset = custom_malloc(n * sizeof(T));
return reinterpret_cast(shared_memory_base_ptr + offset);
}
void deallocate(void *p, std::size_t n) {
(void)n;
if (p) {
const offset_t offset = static_cast(p) - shared_memory_base_ptr);
custom_free(offset);
}
}
};
Подробнее здесь: https://stackoverflow.com/questions/768 ... red-memory