紧凑偏移指针,现有实现
compact offset pointer , existing implementations?
在stl,boost或其他LGPL开源工具包中是否有模板的行为完全像这样:-
-一个自定义对齐的相对指针,选择存储更少的位来减少范围。一个可能的实现来说明:-
template<typename T, typename OFFSET=int,
int ALIGN_SHIFT=2>
class OffsetPtr
{
OFFSET ofs;
public:
T* operator->() {
return (T*) (((((size_t)this)>>ALIGN_SHIFT)+ofs)<<ALIGN_SHIFT);
};
void operator=(T* src) {
size_t ofs_shifted = (((size_t) src)>>ALIGN_SHIFT) - (((size_t) this)>>ALIGN_SHIFT); //asserts..
ofs = (OFFSET) (ofs_shifted);
}
//...
};
这是我过去经常创建的东西(紧凑的缓存友好型预编译数据结构),例如,将数据分成128k以下的块OFFSET=short
我在古老的c#定义中使用的另一种变体是使用头的偏移量,其中对齐将更有用。
我在boost中看到过一个"进程间库",它有一个"offset_ptr",看起来非常相似,所以很可能有一个现有的实现,包括这个确切的模式。它写起来很快,但现有的实现可能会有好处,比如围绕同一概念构建的一套相关的stl兼容数据结构——一个带有16位偏移指针的"近向量"&例如
如果你正在使用Visual c++,你可能会喜欢使用__based
指针。
相关文章:
- 为什么我们要为avl树实现返回一个指向节点的指针,而不是void函数
- Qt中的实现指针(PIMPL)
- 如何实现容纳整数和无效指针的双向链表?
- 给定一个指向堆分配内存的指针,智能指针实现如何为其找到合适的释放函数?
- 使用共享指针实现复制 c'tor?
- 使用指针在分区函数中实现随机分区点
- 涉及指针和手动实现的矩阵类的问题
- 将C++子类成员函数(虚拟实现)传递给 C 类型函数指针
- 使用智能指针指向 C 库中的结构,该结构通过 typedef 隐藏实现(即不完整的类型)
- 未分配被释放的指针(将堆栈实现为链表时)
- 如何正确实现具有原始指针的类的复制构造函数?
- 如何在C++中重新实现包含指针的 STL 容器的类的迭代器
- 我们可以在不使用head指针的情况下通过使用head的简单变量而不是head的指针来实现链表吗
- 如何在CRTP实现中传递基类指针
- 如何在 c++ 中实现指针的类型
- 实现指针队列
- 实现指针元组的深度复制
- 如何实现指针的<<和>>?
- 如何在结构体内部实现指针
- 实现指针转换操作符