Мой main.go:
package main
import "fmt"
// main
func main() {
fmt.Println("hello")
}
Построить его:
go build -o main -gcflags '-N -l'
Точка останова попадания:
gdb main
b runtime.(*mheap).sysAlloc
r
В строке 540 я печатаю v, этодает мне «оптимизирован».
В строке 549 вывод подсказки, он дает мне: нет символа «подсказка» в текущем контексте.
Что странно, что я могу напечатать * h.arenaHints значение, которое выводит hint.downfalse, но в строку 550 все равно нужно перейти.
535 func (h *mheap) sysAlloc(n uintptr) (v unsafe.Pointer, size uintptr) {
536 n = round(n, heapArenaBytes)
537
538 // First, try the arena pre-reservation.
539 v = h.arena.alloc(n, heapArenaBytes, &memstats.heap_sys)
540 if v != nil {
541 size = n
542 goto mapped
543 }
544
545 // Try to grow the heap at a hint address.
546 for h.arenaHints != nil {
547 hint := h.arenaHints
548 p := hint.addr
549 if hint.down {
550 p -= n
551 }
Так почему отключить оптимизацию не удалось?Почему в строку 550 можно войти?
Конверт:
Голанг 1.12
Ubuntu 18.04