I was referring to the “special cases” in this section 
https://golang.org/cmd/cgo/ - wouldn’t all of these uintptr be stable?

> On Jun 4, 2021, at 12:25 AM, Ian Lance Taylor <i...@golang.org> wrote:
> 
> On Thu, Jun 3, 2021 at 9:13 PM Robert Engels <reng...@ix.netcom.com> wrote:
>> 
>> Doesn’t that depend on what the uintptr refers to? Eg if it was allocated 
>> off heap to begin with then it should be stable  and computing a hash on it 
>> is valid.
> 
> That is true in current implementations, but Go, the language, does
> not guarantee that pointers will never move.
> 
> Ian
> 
> 
>> On Jun 3, 2021, at 9:42 AM, 'Axel Wagner' via golang-nuts 
>> <golang-nuts@googlegroups.com> wrote:
>> 
>> 
>>> On Thu, Jun 3, 2021 at 4:19 PM christoph...@gmail.com 
>>> <christophe.mees...@gmail.com> wrote:
>>> 
>>> The documentation doesn’t specify that we can cast an uintptr into a uint64.
>> 
>> 
>> Both are integer types, so they can be converted. You might be worried about 
>> their respective sizes and you are correct that the spec does not guarantee 
>> that a uintptr is at most 64 bit. However, at least for any implementation I 
>> know on any supported architecture, that's the case. If you *really* want to 
>> make sure, you can do something like this:
>> 
>> func toBytes(v uintptr) []byte {
>>    var out []byte
>>    mask := ^uintptr(0)
>>    for mask != 0 {
>>        out = append(out, uint8(v))
>>        v >>= 8
>>        mask >>= 8
>>    }
>>    return out
>> }
>> 
>> But really, you can just trust that a uintptr fits into a uint64. Or, if you 
>> want to future-proof, assume it's uint64, but guard by build tags to known 
>> architectures (so it at least fails to compile if that assumption ever 
>> changes).
>> 
>>> To give some context, the application is for a cache with the hash key 
>>> computed over a pointer to a heap allocated struct. I need to store the 
>>> pointer in the cache entry to test for matching, but this would prevent the 
>>> struct to be garbage collected. Storing the pointer as an uintptr would do 
>>> the trick.
>> 
>> 
>> This is problematic. The address of a value can change, so the uintptr would 
>> change as well. So there is no guarantee that your hash stays the same, in 
>> subsequent calls.
>> Today, that usually doesn't happen, but there is no guarantee it stays that 
>> way. If you are willing to assume that it doesn't happen, you should 
>> definitely also be willing to assume a uintptr fits into a uint64
>> 
>>> 
>>> 
>>> --
>>> You received this message because you are subscribed to the Google Groups 
>>> "golang-nuts" group.
>>> To unsubscribe from this group and stop receiving emails from it, send an 
>>> email to golang-nuts+unsubscr...@googlegroups.com.
>>> To view this discussion on the web visit 
>>> https://groups.google.com/d/msgid/golang-nuts/7983a13f-5bf6-4299-a598-1d023ec9a9e9n%40googlegroups.com.
>> 
>> --
>> You received this message because you are subscribed to the Google Groups 
>> "golang-nuts" group.
>> To unsubscribe from this group and stop receiving emails from it, send an 
>> email to golang-nuts+unsubscr...@googlegroups.com.
>> To view this discussion on the web visit 
>> https://groups.google.com/d/msgid/golang-nuts/CAEkBMfFsZNHLXcONF9C6Nadr6muUP_kgOJwM3QUXSZ0KxPnfYQ%40mail.gmail.com.
>> 
>> --
>> You received this message because you are subscribed to the Google Groups 
>> "golang-nuts" group.
>> To unsubscribe from this group and stop receiving emails from it, send an 
>> email to golang-nuts+unsubscr...@googlegroups.com.
>> To view this discussion on the web visit 
>> https://groups.google.com/d/msgid/golang-nuts/35E8DBC1-E067-4717-BFFF-18732D77B987%40ix.netcom.com.
> 
> -- 
> You received this message because you are subscribed to the Google Groups 
> "golang-nuts" group.
> To unsubscribe from this group and stop receiving emails from it, send an 
> email to golang-nuts+unsubscr...@googlegroups.com.
> To view this discussion on the web visit 
> https://groups.google.com/d/msgid/golang-nuts/CAOyqgcWY%3DS%3DtriGaYtNK_4v4Nw5AAZBCFOY2hKyTHQ9guaaiTw%40mail.gmail.com.

-- 
You received this message because you are subscribed to the Google Groups 
"golang-nuts" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to golang-nuts+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/golang-nuts/F496ED71-41E9-4311-8BF6-E6AE7BC8D8DA%40ix.netcom.com.

Reply via email to