Thanks. So basically, there's no memory benefit or performance benefit to 
using nil slices over empty slices -- it's ultimately just a matter of how 
you want them to serialize JSON or get written to databases?


mathew
On Wednesday, September 7, 2022 at 6:56:33 PM UTC-5 k...@google.com wrote:

> (Actually, that address is an address on the stack, but that's only 
> because the backing store for emptySlice does not escape. It should also 
> take ~no space.)
>
> On Wednesday, September 7, 2022 at 4:53:12 PM UTC-7 Keith Randall wrote:
>
>> That address is not in the heap. It is the address of a special word in 
>> the runtime, called runtime.zerobase, which is explicitly for this purpose. 
>> It is a place to point things that need to be non-nil but have no size.
>>
>> On Wednesday, September 7, 2022 at 12:01:28 PM UTC-7 me...@pobox.com 
>> wrote:
>>
>>> Running this:
>>>
>>> emptyslice := []string{}
>>> sh := (*reflect.SliceHeader)(unsafe.Pointer(&emptyslice))
>>> fmt.Printf("empty slice cap = %d\n", sh.Cap)
>>> fmt.Printf("empty slice len = %d\n", sh.Len)
>>> fmt.Printf("empty slice uintptr = %v\n", sh.Data)
>>>
>>> Output:
>>>
>>> empty slice cap     = 0
>>> empty slice len     = 0
>>> empty slice uintptr = 824634224152
>>>
>>> The non-zero uintptr suggests that something is allocated on the heap. 
>>> But the cap is 0, so any backing array should have a size of 0. So what is 
>>> allocated on the heap? Surely not an array of size 0?
>>>
>>>
>>> mathew
>>>
>>

-- 
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/ab489f02-e391-41cd-93ef-e415661a886bn%40googlegroups.com.

Reply via email to