在动态char数组中存储不同大小的对象(对齐?)

时间:2015-10-23 22:19:03

标签: c++ arrays memory char

我正在创建一个内存池实现,它可以存储某些模板类型T的派生类型的对象。当前的实现在这里(有趣的类位于底部,BaseMemoryPool):http://pastebin.com/exgkzSyT

我没有在这里发布代码,因为它比我提出要点的时间长得多;我如何安全地(关于对齐,块对齐等)并且没有性能损失将动态分配的char数组的某些部分强制转换为某些模板化类型U

我正在尝试做的草图:

template <typename U>
U *setAndReturnPointer(U &&object, char *storage, size_t storageLength, size_t byteOffset) {
    static_assert(std::is_base_of<Base, typename std::decay<U>::type>::value, "item must be of or derived of type Base");
    assert(byteOffset + sizeof(U) <= storageLength);

    U *ptr = reinterpret_cast<U*>(&storage[byteOffset]);
    *ptr = std::forward<U>(item);
    return ptr;
}

我有一种感觉,我在这里遇到了整齐的对齐和内存错误,等等。我非常感谢一些指导和学习如何做到这一点,或者如果不能做到,有什么替代方案。非常感谢! :)

1 个答案:

答案 0 :(得分:0)

std::align给出的例子完美地回答了我的问题,并教会了我更多关于对齐的工作原理。

http://en.cppreference.com/w/cpp/memory/align