2011-02-07 31 views
0

我想创建一个不复制其键的自定义字典(保留)。基于整数地址的比较器

在内部,我打算使用带有特殊Pair对象的NSMutableArray,其中对的第一个对象是关键字,第二个对象是值。

钥匙都是独一无二的。

为了快速检索键上的对象,我会使用二分搜索算法 - 所以数组应该被排序(注意!)内存地址对的第一个对象。

(顺便说一句,这就是为什么我拒绝使用CFDictionaryRef有一组特殊的回调的 - 我怀疑它的情况下,降解为O(N)时,将无法提供合理的散列)

是这是一个坏主意,假定:作为键

  • 对象可以在内部(即,我无法使用isEqual:代替地址比较)变化;
  • 用作键的对象不会被解除分配(这是合理的 - 它们由特殊的Pair对象保留,而Pair由内部NSArray保留)。

为什么它不好(或好)?

如何从指针获取内存地址?只需将它投射到long long int或类似的东西?

谢谢!

+1

“我如何从指针获取内存地址?”一个指针值*是一个内存地址... – Richard 2011-02-07 15:50:46

回答

1

要从指针获取整数值,请将其转换为intptr_tuintptr_t。这些类型在<stdint.h>中定义,明确保证足够大以保存指针的值。

1

我假设objective-c中的指针与c/C++类似。我已经构建了内存地址的排序数组,用于查找堆栈跟踪。在一个64位的机器上,它应该被转换为任何标量变量是64位,可能是一个long int。或者,如果您可以使用uint64_t类型,它将保证正确的大小。对于32位机器,请使用无符号的32位整数或uint32_t。您可以在指针上使用> <> = < = =和 - 运算符,并且还可以使用带有指针和整数的+运算符。