2011-02-07 75 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。您可以在指針上使用> <> = < = =和 - 運算符,並且還可以使用帶有指針和整數的+運算符。