gpt4 book ai didi

c++ - 紧凑的偏移指针,现有的实现?

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:45:39 25 4
gpt4 key购买 nike

在 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 以下 block 的数据 OFFSET=short
我在古老的 C#defines 中使用的另一个变体将使用 header 的偏移量,其中对齐会更有用。

我在 boost 中看到了一些关于“进程间库”的东西,它有一个“offset_ptr”,看起来非常相似,所以看起来很可能有一个现有的实现包括这个确切的模式某处。它编写起来很快,但现有的实现可能会有好处,例如围绕同一概念构建的一套相关的 STL 兼容数据结构——例如,具有 16 位偏移指针和 16 位计数的“近 vector ”

最佳答案

如果您使用的是 Visual C++,您可能喜欢使用 __based pointers .

关于c++ - 紧凑的偏移指针,现有的实现?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8285332/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com