如何在C ++标准容器中使用具有相对寻址的分配器?
template<class T>
class Allocator
{
public:
typedef uint32_t pointer;
T& dereference(pointer x) noexcept
{
assert(is_valid(x));
return *(base_ptr + x);
}
private:
T* base_ptr;
//...
};
动机:
base_ptr
转储到磁盘,并为空元素填充。为节省磁盘空间,gzip
结果。std::map<int,int>
,其中每个节点需要额外的32字节,除非你将颜色位破解成其中一个指针的最低位,依赖于这样的事实:有4位始终为零)。使用相对地址,指针大小可以保持较小,因此开销较低。在分配器的接口中没有指定自定义dereference
方法。 std::pointer_traits
有pointer_to
,但这是静态的,因此无法访问基指针。