教程集 www.jiaochengji.com
教程集 >  Golang编程  >  golang教程  >  正文 Golang协程栈概述

Golang协程栈概述

发布时间:2023-01-12   编辑:jiaochengji.com
教程集为您提供Golang协程栈概述等资源,欢迎您收藏本站,我们将为您提供最新的Golang协程栈概述资源

说明

计算机中的栈一个很大的应用场合使用在函数调用中。我们这里简单说说golang的协程栈布局,学过计算机的应该都不会陌生。

程序事例

package main

func f(a, b int) int {
    sum := 0
    sum = a   b
    for i := 0; i < 1000; i   {
        println("sum is:", sum)
    }
    return sum
}

func main() {
    f(1, 2)
}

汇编代码

(gdb) disas
Dump of assembler code for function main.main:
0x00000000004010b0 <main.main 0>:       mov    %fs:0xfffffffffffffff8,%rcx
0x00000000004010b9 <main.main 9>:       cmp    0x10(%rcx),%rsp
0x00000000004010bd <main.main 13>:      jbe    0x4010de <main.main 46>
0x00000000004010bf <main.main 15>:      sub    $0x18,%rsp
0x00000000004010c3 <main.main 19>:      movq   $0x1,(%rsp)
0x00000000004010cb <main.main 27>:      movq   $0x2,0x8(%rsp)
0x00000000004010d4 <main.main 36>:      callq  0x401000 <main.f>
0x00000000004010d9 <main.main 41>:      add    $0x18,%rsp
0x00000000004010dd <main.main 45>:      retq

0x00000000004010de <main.main 46>:      callq  0x44abd0 <runtime.morestack_noctxt>
0x00000000004010e3 <main.main 51>:      jmp    0x4010b0 <main.main>
0x00000000004010e5 <main.main 53>:      add    %al,(%rax)
0x00000000004010e7 <main.main 55>:      add    %al,(%rax)
0x00000000004010e9 <main.main 57>:      add    %al,(%rax)
0x00000000004010eb <main.main 59>:      add    %al,(%rax)
0x00000000004010ed <main.main 61>:      add    %al,(%rax)
0x00000000004010ef <main.main 63>:      add    %ah,-0x75(%rax,%rcx,2)
End of assembler dump.
(gdb) disas
Dump of assembler code for function main.f:
0x0000000000401000 <main.f 0>:  mov    %fs:0xfffffffffffffff8,%rcx
0x0000000000401009 <main.f 9>:  cmp    0x10(%rcx),%rsp
0x000000000040100d <main.f 13>: jbe    0x401097 <main.f 151>
0x0000000000401013 <main.f 19>: sub    $0x20,%rsp
0x0000000000401017 <main.f 23>: mov    0x28(%rsp),%rbx
0x000000000040101c <main.f 28>: mov    0x30(%rsp),%rbp
0x0000000000401021 <main.f 33>: add    %rbp,%rbx
0x0000000000401024 <main.f 36>: mov    %rbx,0x10(%rsp)
0x0000000000401029 <main.f 41>: xor    

您可能感兴趣的文章:
探索Golang协程实现——从v1.0开始
golang为什么用协程而不是线程
golang float32转float64精度丢失_golang 混合写屏障原理深入剖析,这篇文章给你梳理的明明白白!...
golang的协程原理
Golang协程原理(一)
go 协程
Golang教程:goroutine协程
golang 反射_golang 内存管理分析
golang经典面试问题汇总
golang学习笔记(二)—— 深入golang中的协程

[关闭]
~ ~