紧凑偏移指针,现有实现

compact offset pointer , existing implementations?

本文关键字:实现 指针      更新时间:2023-10-16

在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指针。