> On Jan 3, 2017, at 10:04 PM, Ray Fix via swift-users <swift-users@swift.org> 
> wrote:
> 
> 
> There was a great talk at WWDC 2016 about internals and Swift performance.  
> https://developer.apple.com/videos/play/wwdc2016/416/ 
> <https://developer.apple.com/videos/play/wwdc2016/416/>
> 
> At one point, Arnold Schwaighofer says, "Copying of large values incurs heap 
> allocation.”  What isn’t clear to me here is if he is still referring to just 
> existential container types or in just large values in general.
> 
> My understanding is a value can get put on the heap if:
> 
> 1) it is passed through a protocol and exceeds small size (3 words of storage)
> 2) it is captured by an escaping closure, and needs to extend lifetime
> 
> Suppose I make a large struct, and pass it as a parameter, is there a point 
> where the compiler says, “Okay wise-guy, you are going on the heap now.”  Can 
> this be detected with MemoryLayout<BigStruct>.size?  I have tried a couple 
> experiments where I make beefy (1kB) structs in the playground but I never 
> see the size suddenly dropping to a pointer size.
> 
> Any insights you have are greatly appreciated! 😃✨

No, Swift currently never implicitly puts parts of large structs on the heap. 
The heap allocation would come from the struct needing to be stored in 
something heap-allocated, such as a protocol container or capture box, like you 
said.

-Joe

_______________________________________________
swift-users mailing list
swift-users@swift.org
https://lists.swift.org/mailman/listinfo/swift-users

Reply via email to