[swift-users] Memory Address of value types and reference types

Andrew Trick atrick at apple.com
Tue Sep 12 12:19:54 CDT 2017


> On Sep 12, 2017, at 9:55 AM, somu subscribe via swift-users <swift-users at swift.org> wrote:
> 
> Hi Quinn,
> 
> Thanks for the reply,
> 
> It is an iOS Swift project (uses Foundation, UIKit, CloudKit and other native frameworks) in which I would like to check the memory address for debugging (and out of enthusiasm). There is no C code I am using.
> 
> I have some asynchronous call back functions from CloudKit frameworks which return CKUserIdentity objects.
> 
> So thought it would be nice if I could print the memory address of CKUserIdentity objects and to check if it was unique.
> 
> And there are some other custom Swift Structs which I would like to know the memory address of.
> 
> Thanks and regards,
> Muthu

For classes, use the Unmanaged API as Quinn’s suggested.

Your structs, tuples, and enums only have an address during mutation. So, for example, if you wrap all of your code in a function that takes the variable `inout`, you’ll see a consistent address within a single call to that function. There’s an implicit cast from `inout` to Unsafe[Mutable]Pointer arguments, so you can inspect the pointer value...

func foo(p: Unsafe[Mutable]Pointer) { print(p) }

foo(&s2)

As you noticed, between calls to `foo` you could see a different address.

If you really want to give your structs an “identity” you would need to wrap them in a class.

-Andy

>> On 12 Sep 2017, at 10:35 PM, Quinn The Eskimo! via swift-users <swift-users at swift.org> wrote:
>> 
>> 
>> On 12 Sep 2017, at 13:44, somu subscribe via swift-users <swift-users at swift.org> wrote:
>> 
>>> 1. Is the above shown the correct way to get reference type memory address ?
>>> 2. What Is it the correct way to get value type memory address ?
>> 
>> It’s hard to answer that without knowing how you’re intended to use these techniques.  If you can explain more about where you’re going with this, I should be able to make some specific recommendations.
>> 
>> For example, if you’re goal were to pass a Swift object to a C API that takes a callback function pointer and a ‘cookie’ value, and hen calls that function with that cookie (like the `qsort_r` function), the to/from opaque mechanism provider by `Unmanaged` is the recommended way to pass a Swift object through such a cookie value.
>> 
>>> 3. Is it possible to get the memory address of immutable value type (declared as let)
>> 
>> No, because such values don’t necessarily exist in memory.
>> 
>> Share and Enjoy
>> --
>> Quinn "The Eskimo!"                    <http://www.apple.com/developer/>
>> Apple Developer Relations, Developer Technical Support, Core OS/Hardware
>> 
>> 
>> _______________________________________________
>> swift-users mailing list
>> swift-users at swift.org
>> https://lists.swift.org/mailman/listinfo/swift-users
> 
> _______________________________________________
> swift-users mailing list
> swift-users at swift.org
> https://lists.swift.org/mailman/listinfo/swift-users



More information about the swift-users mailing list