【问题标题】:Comparator based on integer addresses基于整数地址的比较器
【发布时间】:2011-06-22 20:03:39
【问题描述】:

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

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

键都是唯一的。

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

(顺便说一句,这就是为什么我拒绝将 CFDictionaryRef 与一组特殊的回调一起使用 - 我怀疑它会降级到 O(n),以防无法提供合理的哈希)

这是一个坏主意吗,假设:

  • 用作键的对象可能会在内部发生变化(也就是说,我不能使用isEqual: 代替地址比较);
  • 用作键的对象不会被释放(这是合理的 - 它们由特殊的 Pair 对象保留,而 Pair 由内部 NSArray 保留)。

为什么不好(或好)?

如何从指针中获取内存地址?只需将其转换为 long long int 或类似的吗?

谢谢!

【问题讨论】:

  • "如何从指针中获取内存地址?"一个指针值一个内存地址...
  • 我知道它在内部是:) 但我一直认为我不能直接用 比较指针值。

标签: objective-c memory pointers nsdictionary


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-08-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-20
      • 1970-01-01
      相关资源
      最近更新 更多