5
Github runtime: don't allocate for non-escaping conversions to interface{} · Iss...
source link: https://github.com/golang/go/issues/8618
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
fmt.Fprintf("%d", 8) Since all interface data fields are now pointers, an int must be allocated and initialized to 8 so that it can be put in an interface{} to pass to Fprintf. Since we know the 8 doesn't escape, we could instead allocate that 8 on the stack and have the interface data word point to that stack slot. To be safe, we can only do this when the resulting interface{} doesn't escape. We probably also need to be sure the conversion happens at most once so the stack slot is not reused. We could have a special convT2Enoescape call for the compiler to use when it knows the result doesn't escape. Maybe also convT2I, assertT2E, ...
Recommend
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK