我正在创建一个内存池实现,它可以存储某些模板类型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;
}
我有一种感觉,我在这里遇到了整齐的对齐和内存错误,等等。我非常感谢一些指导和学习如何做到这一点,或者如果不能做到,有什么替代方案。非常感谢! :)
答案 0 :(得分:0)
std::align
给出的例子完美地回答了我的问题,并教会了我更多关于对齐的工作原理。