[swift-users] Memory Address of value types and reference types
Taylor Swift
kelvin13ma at gmail.com
Tue Sep 12 14:36:05 CDT 2017
i think this is something that’s mostly important for educational purposes and the fact that Swift is mostly opaque to memory makes it harder to teach.
> On Sep 12, 2017, at 12:19 PM, Andrew Trick via swift-users <swift-users at swift.org> wrote:
>
>
>> 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
>
> _______________________________________________
> 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