Last active
June 21, 2025 06:45
-
-
Save TheFranconianCoder/88ce2f7b32a0ea1fd0cb8001b98e765a to your computer and use it in GitHub Desktop.
Article: Balancing Function Splitting and Performance in Go
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| package main | |
| import ( | |
| "fmt" | |
| "math/rand" | |
| ) | |
| func main() { | |
| y := rand.Int() | |
| x := func() string { | |
| if y == 3 { | |
| return "b" | |
| } | |
| return "a" | |
| }() | |
| fmt.Println(x) | |
| } |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| TEXT main.main(SB) main_closure.go | |
| main_closure.go:8 0x49b260 493b6610 CMPQ SP, 0x10(R14) | |
| main_closure.go:8 0x49b264 766b JBE 0x49b2d1 | |
| main_closure.go:8 0x49b266 55 PUSHQ BP | |
| main_closure.go:8 0x49b267 4889e5 MOVQ SP, BP | |
| main_closure.go:8 0x49b26a 4883ec38 SUBQ $0x38, SP | |
| main_closure.go:9 0x49b26e e86df9ffff CALL math/rand.Int(SB) | |
| main_closure.go:15 0x49b273 90 NOPL | |
| main_closure.go:16 0x49b274 440f117c2428 MOVUPS X15, 0x28(SP) | |
| main_closure.go:11 0x49b27a 4883f803 CMPQ AX, $0x3 | |
| main_closure.go:10 0x49b27e 488d053b530200 LEAQ go:string.*(SB), AX | |
| main_closure.go:10 0x49b285 488d0ddcc40400 LEAQ runtime.egcbss+4(SB), CX | |
| main_closure.go:10 0x49b28c 480f44c1 CMOVE CX, AX | |
| main_closure.go:16 0x49b290 bb01000000 MOVL $0x1, BX | |
| main_closure.go:16 0x49b295 e886aefcff CALL runtime.convTstring(SB) | |
| main_closure.go:16 0x49b29a 488d0dbfaf0000 LEAQ runtime.types+41568(SB), CX | |
| main_closure.go:16 0x49b2a1 48894c2428 MOVQ CX, 0x28(SP) | |
| main_closure.go:16 0x49b2a6 4889442430 MOVQ AX, 0x30(SP) | |
| print.go:314 0x49b2ab 488b1d3e900d00 MOVQ os.Stdout(SB), BX | |
| print.go:314 0x49b2b2 488d056fcc0400 LEAQ go:itab.*os.File,io.Writer(SB), AX | |
| print.go:314 0x49b2b9 488d4c2428 LEAQ 0x28(SP), CX | |
| print.go:314 0x49b2be bf01000000 MOVL $0x1, DI | |
| print.go:314 0x49b2c3 4889fe MOVQ DI, SI | |
| print.go:314 0x49b2c6 e855a6ffff CALL fmt.Fprintln(SB) | |
| main_closure.go:11 0x49b2cb 4883c438 ADDQ $0x38, SP | |
| main_closure.go:11 0x49b2cf 5d POPQ BP | |
| main_closure.go:11 0x49b2d0 c3 RET | |
| main_closure.go:8 0x49b2d1 e88a0ffdff CALL runtime.morestack_noctxt.abi0(SB) | |
| main_closure.go:8 0x49b2d6 eb88 JMP main.main(SB) | |
| :-1 0x49b2d8 cc INT $0x3 | |
| :-1 0x49b2d9 cc INT $0x3 | |
| :-1 0x49b2da cc INT $0x3 | |
| :-1 0x49b2db cc INT $0x3 | |
| :-1 0x49b2dc cc INT $0x3 | |
| :-1 0x49b2dd cc INT $0x3 | |
| :-1 0x49b2de cc INT $0x3 | |
| :-1 0x49b2df cc INT $0x3 |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| package main | |
| import ( | |
| "fmt" | |
| "math/rand" | |
| ) | |
| func main() { | |
| y := rand.Int() | |
| x := "a" | |
| if y == 3 { | |
| x = "b" | |
| } | |
| fmt.Println(x) | |
| } |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| TEXT main.main(SB) main_direct.go | |
| main_direct.go:8 0x49b260 493b6610 CMPQ SP, 0x10(R14) | |
| main_direct.go:8 0x49b264 766a JBE 0x49b2d0 | |
| main_direct.go:8 0x49b266 55 PUSHQ BP | |
| main_direct.go:8 0x49b267 4889e5 MOVQ SP, BP | |
| main_direct.go:8 0x49b26a 4883ec38 SUBQ $0x38, SP | |
| main_direct.go:9 0x49b26e e86df9ffff CALL math/rand.Int(SB) | |
| main_direct.go:14 0x49b273 440f117c2428 MOVUPS X15, 0x28(SP) | |
| main_direct.go:11 0x49b279 4883f803 CMPQ AX, $0x3 | |
| main_direct.go:14 0x49b27d 488d053c530200 LEAQ go:string.*(SB), AX | |
| main_direct.go:14 0x49b284 488d0dcdc40400 LEAQ runtime.egcbss+4(SB), CX | |
| main_direct.go:14 0x49b28b 480f44c1 CMOVE CX, AX | |
| main_direct.go:14 0x49b28f bb01000000 MOVL $0x1, BX | |
| main_direct.go:14 0x49b294 e887aefcff CALL runtime.convTstring(SB) | |
| main_direct.go:14 0x49b299 488d0dc0af0000 LEAQ runtime.types+41568(SB), CX | |
| main_direct.go:14 0x49b2a0 48894c2428 MOVQ CX, 0x28(SP) | |
| main_direct.go:14 0x49b2a5 4889442430 MOVQ AX, 0x30(SP) | |
| print.go:314 0x49b2aa 488b1d3f900d00 MOVQ os.Stdout(SB), BX | |
| print.go:314 0x49b2b1 488d0560cc0400 LEAQ go:itab.*os.File,io.Writer(SB), AX | |
| print.go:314 0x49b2b8 488d4c2428 LEAQ 0x28(SP), CX | |
| print.go:314 0x49b2bd bf01000000 MOVL $0x1, DI | |
| print.go:314 0x49b2c2 4889fe MOVQ DI, SI | |
| print.go:314 0x49b2c5 e856a6ffff CALL fmt.Fprintln(SB) | |
| main_direct.go:11 0x49b2ca 4883c438 ADDQ $0x38, SP | |
| main_direct.go:11 0x49b2ce 5d POPQ BP | |
| main_direct.go:11 0x49b2cf c3 RET | |
| main_direct.go:8 0x49b2d0 e88b0ffdff CALL runtime.morestack_noctxt.abi0(SB) | |
| main_direct.go:8 0x49b2d5 eb89 JMP main.main(SB) | |
| :-1 0x49b2d7 cc INT $0x3 | |
| :-1 0x49b2d8 cc INT $0x3 | |
| :-1 0x49b2d9 cc INT $0x3 | |
| :-1 0x49b2da cc INT $0x3 | |
| :-1 0x49b2db cc INT $0x3 | |
| :-1 0x49b2dc cc INT $0x3 | |
| :-1 0x49b2dd cc INT $0x3 | |
| :-1 0x49b2de cc INT $0x3 | |
| :-1 0x49b2df cc INT $0x3 |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| package main | |
| import ( | |
| "fmt" | |
| "math/rand" | |
| ) | |
| func set(y int) string { | |
| if y == 3 { | |
| return "b" | |
| } | |
| return "a" | |
| } | |
| func main() { | |
| y := rand.Int() | |
| x := set(y) | |
| fmt.Println(x) | |
| } |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| TEXT main.main(SB) main_func.go | |
| main_func.go:15 0x49b260 493b6610 CMPQ SP, 0x10(R14) | |
| main_func.go:15 0x49b264 766a JBE 0x49b2d0 | |
| main_func.go:15 0x49b266 55 PUSHQ BP | |
| main_func.go:15 0x49b267 4889e5 MOVQ SP, BP | |
| main_func.go:15 0x49b26a 4883ec38 SUBQ $0x38, SP | |
| main_func.go:16 0x49b26e e86df9ffff CALL math/rand.Int(SB) | |
| main_func.go:18 0x49b273 440f117c2428 MOVUPS X15, 0x28(SP) | |
| main_func.go:9 0x49b279 4883f803 CMPQ AX, $0x3 | |
| main_func.go:17 0x49b27d 488d053c530200 LEAQ go:string.*(SB), AX | |
| main_func.go:17 0x49b284 488d0dddc40400 LEAQ runtime.egcbss+4(SB), CX | |
| main_func.go:17 0x49b28b 480f44c1 CMOVE CX, AX | |
| main_func.go:18 0x49b28f bb01000000 MOVL $0x1, BX | |
| main_func.go:18 0x49b294 e887aefcff CALL runtime.convTstring(SB) | |
| main_func.go:18 0x49b299 488d0dc0af0000 LEAQ runtime.types+41568(SB), CX | |
| main_func.go:18 0x49b2a0 48894c2428 MOVQ CX, 0x28(SP) | |
| main_func.go:18 0x49b2a5 4889442430 MOVQ AX, 0x30(SP) | |
| print.go:314 0x49b2aa 488b1d3f900d00 MOVQ os.Stdout(SB), BX | |
| print.go:314 0x49b2b1 488d0570cc0400 LEAQ go:itab.*os.File,io.Writer(SB), AX | |
| print.go:314 0x49b2b8 488d4c2428 LEAQ 0x28(SP), CX | |
| print.go:314 0x49b2bd bf01000000 MOVL $0x1, DI | |
| print.go:314 0x49b2c2 4889fe MOVQ DI, SI | |
| print.go:314 0x49b2c5 e856a6ffff CALL fmt.Fprintln(SB) | |
| main_func.go:9 0x49b2ca 4883c438 ADDQ $0x38, SP | |
| main_func.go:9 0x49b2ce 5d POPQ BP | |
| main_func.go:9 0x49b2cf c3 RET | |
| main_func.go:15 0x49b2d0 e88b0ffdff CALL runtime.morestack_noctxt.abi0(SB) | |
| main_func.go:15 0x49b2d5 eb89 JMP main.main(SB) | |
| :-1 0x49b2d7 cc INT $0x3 | |
| :-1 0x49b2d8 cc INT $0x3 | |
| :-1 0x49b2d9 cc INT $0x3 | |
| :-1 0x49b2da cc INT $0x3 | |
| :-1 0x49b2db cc INT $0x3 | |
| :-1 0x49b2dc cc INT $0x3 | |
| :-1 0x49b2dd cc INT $0x3 | |
| :-1 0x49b2de cc INT $0x3 | |
| :-1 0x49b2df cc INT $0x3 |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| package main | |
| import ( | |
| "fmt" | |
| "math/rand" | |
| ) | |
| //go:noinline | |
| func set2(y int) string { | |
| if y == 3 { | |
| return "b" | |
| } | |
| return "a" | |
| } | |
| func main() { | |
| y := rand.Int() | |
| x := set2(y) | |
| fmt.Println(x) | |
| } |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| TEXT main.main(SB) main_no_inline.go | |
| main_no_inline.go:16 0x49b2a0 493b6610 CMPQ SP, 0x10(R14) | |
| main_no_inline.go:16 0x49b2a4 7656 JBE 0x49b2fc | |
| main_no_inline.go:16 0x49b2a6 55 PUSHQ BP | |
| main_no_inline.go:16 0x49b2a7 4889e5 MOVQ SP, BP | |
| main_no_inline.go:16 0x49b2aa 4883ec38 SUBQ $0x38, SP | |
| main_no_inline.go:17 0x49b2ae e82df9ffff CALL math/rand.Int(SB) | |
| main_no_inline.go:18 0x49b2b3 e8a8ffffff CALL main.set2(SB) | |
| main_no_inline.go:19 0x49b2b8 440f117c2428 MOVUPS X15, 0x28(SP) | |
| main_no_inline.go:19 0x49b2be 6690 NOPW | |
| main_no_inline.go:19 0x49b2c0 e85baefcff CALL runtime.convTstring(SB) | |
| main_no_inline.go:19 0x49b2c5 488d0d94af0000 LEAQ type:*+41568(SB), CX | |
| main_no_inline.go:19 0x49b2cc 48894c2428 MOVQ CX, 0x28(SP) | |
| main_no_inline.go:19 0x49b2d1 4889442430 MOVQ AX, 0x30(SP) | |
| print.go:314 0x49b2d6 488b1d13900d00 MOVQ os.Stdout(SB), BX | |
| print.go:314 0x49b2dd 488d0534cc0400 LEAQ go:itab.*os.File,io.Writer(SB), AX | |
| print.go:314 0x49b2e4 488d4c2428 LEAQ 0x28(SP), CX | |
| print.go:314 0x49b2e9 bf01000000 MOVL $0x1, DI | |
| print.go:314 0x49b2ee 4889fe MOVQ DI, SI | |
| print.go:314 0x49b2f1 e82aa6ffff CALL fmt.Fprintln(SB) | |
| main_no_inline.go:20 0x49b2f6 4883c438 ADDQ $0x38, SP | |
| main_no_inline.go:20 0x49b2fa 5d POPQ BP | |
| main_no_inline.go:20 0x49b2fb c3 RET | |
| main_no_inline.go:16 0x49b2fc 0f1f4000 NOPL 0(AX) | |
| main_no_inline.go:16 0x49b300 e85b0ffdff CALL runtime.morestack_noctxt.abi0(SB) | |
| main_no_inline.go:16 0x49b305 eb99 JMP main.main(SB) | |
| :-1 0x49b307 cc INT $0x3 | |
| :-1 0x49b308 cc INT $0x3 | |
| :-1 0x49b309 cc INT $0x3 | |
| :-1 0x49b30a cc INT $0x3 | |
| :-1 0x49b30b cc INT $0x3 | |
| :-1 0x49b30c cc INT $0x3 | |
| :-1 0x49b30d cc INT $0x3 | |
| :-1 0x49b30e cc INT $0x3 | |
| :-1 0x49b30f cc INT $0x3 | |
| :-1 0x49b310 cc INT $0x3 | |
| :-1 0x49b311 cc INT $0x3 | |
| :-1 0x49b312 cc INT $0x3 | |
| :-1 0x49b313 cc INT $0x3 | |
| :-1 0x49b314 cc INT $0x3 | |
| :-1 0x49b315 cc INT $0x3 | |
| :-1 0x49b316 cc INT $0x3 | |
| :-1 0x49b317 cc INT $0x3 | |
| :-1 0x49b318 cc INT $0x3 | |
| :-1 0x49b319 cc INT $0x3 | |
| :-1 0x49b31a cc INT $0x3 | |
| :-1 0x49b31b cc INT $0x3 | |
| :-1 0x49b31c cc INT $0x3 | |
| :-1 0x49b31d cc INT $0x3 | |
| :-1 0x49b31e cc INT $0x3 | |
| :-1 0x49b31f cc INT $0x3 |
Comments are disabled for this gist.