Go 1.15 中,小整数转换为接口值的疑问

quanquan616 · · 839 次点击
刚才修改了一些代码,并用站长文章中所写的 `bench` 思路尝试了一下,确实没有分配内存了。我这个折腾,实际上是在获取数组的内存地址。 从 `void *` 的角度来看,就是指针一个个往后挪,获取到的是数组中,每个索引的地址了。 ![无标题.jpg](https://static.studygolang.com/200930/c42458a17b4f26f17b46d51167331271.jpg)
#3
更多评论
你这里打印的是 slice 中元素的地址,都是连续的,看着没什么问题。至于`interface{}`,我就不清楚怎么查了,怀疑取值时go内部会转换掉,你很难拿到。要不一起看看 https://research.swtch.com/interfaces 研究下。
#1
我觉得吧, make只是分配一个interface{}的数组, 但是数组的值都是nil, 这个应该理解成void*, 这个地址有3个很正常, 指针本身也有地址的.你后来的赋值, 把小整数赋值过去, 不分配内存的意思我相信应该是这个小整数已经作为常量池的数据 固定在内存某个地方, 你的interface是直接指向这里的, 而不用另外新分配的动态变量地址.
#2