使用gdb调试禁用优化后,golang仍进行了优化

时间:2019-03-15 08:20:27

标签: go runtime

我的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.down为false,但是第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行?

Env:
golang 1.12
ubuntu 18.04

0 个答案:

没有答案