为p分配的内存在哪里

Where is the memory allocated for p

package main

import (
       "io"
       "os"
       "strings"
)

type rot13Reader struct {
        r io.Reader
}

func (rot *rot13Reader) Read(p []byte) (n int, err error) {
        n, err = rot.r.Read(p)     //<---- where allocated the mem for p?
        for i := 0; i < len(p); i++ {
                if p[i] >= 'A' && p[i] <= 'Z' {
                        p[i] = 65 + (p[i] - 65 + 13) % 26
                } else if p[i] >= 'a' && p[i] <= 'z' {
                        p[i] = 97 + (p[i] - 97 + 13) % 26
                }
        }
        return
}

func main() {
        s := strings.NewReader("Lbh penpxrq gur pbqr!")
        r := rot13Reader{s}
        io.Copy(os.Stdout, &r)
}

这是围棋之旅中的练习。上面的代码可以 运行 正确,但我只是不明白 p.

的内存分配在哪里

io.Copy 将调用 io.Reader 的方法 Read(),查看实现 https://golang.org/src/io/io.go?s=12490:12550#L349,如果您继续阅读下面的几行,您会发现方法 copyBuffer() 在里面你会看到这些行:

if buf == nil {
    buf = make([]byte, 32*1024)
}

for {
    nr, er := src.Read(buf)

// ...more stuff