比较器基于整数地址

时间:2011-02-07 15:45:22

标签: objective-c memory pointers nsdictionary

我想创建一个不复制其键的自定义词典(只保留)。

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

钥匙都是独一无二的。

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

(顺便说一句,这就是为什么我拒绝使用CFDictionaryRef和一组特殊的回调 - 我怀疑如果没有提供合理的哈希值,它会降级为O(n))< / p>

这是一个坏主意,假设:

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

为什么不好(或好)?

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

谢谢!

2 个答案:

答案 0 :(得分:1)

我认为objective-c中的指针与c / c ++类似。我已经构建了排序的内存地址数组,用于查找堆栈跟踪。在64位机器上,它应该被转换为64位的标量变量,可能是长整数。或者,如果您可以使用uint64_t类型,它将保证正确的大小。对于32位机器,请使用无符号32位整数或uint32_t。你可以使用&gt; &LT; &gt; =&lt; = =和 - 指针上的运算符,您也可以使用带有指针和整数的+运算符。

答案 1 :(得分:1)

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