Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Do Gophers Dream of Stack Overflow?
Search
Takuto Nagami
May 22, 2026
36
0
Share
Do Gophers Dream of Stack Overflow?
2026/5/22 Slides for the presentation at GopherCon Singapore.
Takuto Nagami
May 22, 2026
More Decks by Takuto Nagami
See All by Takuto Nagami
今こそ学びたいKubernetesネットワーク ~CNIが繋ぐNWとプラットフォームの「フラッと」な対話
logica0419
9
1.1k
キャリア科目では教えてくれない、就活を生き抜く法則
logica0419
2
290
歴史から学ぶ、Goのメモリ管理基礎
logica0419
17
3.9k
【2025改訂版】ITエンジニアとして知っておいてほしい、電子メールという大きな穴
logica0419
2
210
Fundamentals of Memory Management in Go: Learning Through the History
logica0419
1
160
GopherCon Tourのつくりかた
logica0419
2
140
Go言語はstack overflowの夢を見るか?
logica0419
2
860
あなたの言葉に力を与える、演繹的なアプローチ
logica0419
1
290
GC25 Recap+: Advancing Go Garbage Collection with Green Tea
logica0419
3
1.1k
Featured
See All Featured
Principles of Awesome APIs and How to Build Them.
keavy
128
17k
How to Build an AI Search Optimization Roadmap - Criteria and Steps to Take #SEOIRL
aleyda
1
2.1k
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
35
3.5k
SEO Brein meetup: CTRL+C is not how to scale international SEO
lindahogenes
1
2.7k
Agile Leadership in an Agile Organization
kimpetersen
PRO
0
160
So, you think you're a good person
axbom
PRO
2
2k
State of Search Keynote: SEO is Dead Long Live SEO
ryanjones
0
200
Hiding What from Whom? A Critical Review of the History of Programming languages for Music
tomoyanonymous
2
840
Test your architecture with Archunit
thirion
1
2.3k
How To Stay Up To Date on Web Technology
chriscoyier
790
250k
End of SEO as We Know It (SMX Advanced Version)
ipullrank
3
4.2k
For a Future-Friendly Web
brad_frost
183
10k
Transcript
Takuto Nagami @logica0419 Do Gophers Dream of Stack Overflow?
Ever heard of stack overflow?
Ever heard of stack overflow? No this one today!
Stack memory (and heap memory)
RAM from the application perspective . . . • Key-value
store ◦ Key: Memory address ◦ Value: 1 byte for each addr • Most of high-level language (including Go) divides this store into two areas: Stack and Heap 0x0000 0x0001 0x0002 0x0003
. . . Stack memory area
. . . main() stack frame Stack memory area
. . . main() stack frame 5 Stack memory area
{v addr}
. . . main() stack frame 5 a() stack frame
Stack memory area {v addr}
. . . main() stack frame 5 a() stack frame
5 Stack memory area {arg addr} {v addr}
. . . main() stack frame 5 a() stack frame
5 7 Stack memory area {arg addr} {a addr} {v addr}
. . Stack memory area main() stack frame 5 a()
stack frame {arg addr} {a addr} {v addr} 5 7 b() stack frame
. . Stack memory area main() stack frame 5 a()
stack frame {arg addr} {arg addr} {a addr} {v addr} 5 7 b() stack frame 7
. . Stack memory area main() stack frame 5 a()
stack frame {arg addr} {b addr} {arg addr} {a addr} {v addr} 5 7 b() stack frame 7 1
. . . Stack memory area main() stack frame 5
a() stack frame {arg addr} {a addr} {v addr} 5 7
. . . Stack memory area main() stack frame 5
{v addr}
. . . Stack memory area Program exits
Stack is not a silver bullet... • Can’t handle unknown
data size (maps/slices) ◦ Stack allocation is compiler’s duty • Sometimes can’t share variables between functions → These go to heap memory area
Stack overflow (primary meaning)
Stack overflow • Language decides border between heap and stack
◦ e.g., in C on Linux, stack size is 8MB . . . . . Heap var main() stack frame
Stack overflow • Going over the stack limit with nested
function
Stack overflow • Going over the stack limit with nested
function → Stack overflow!!
Flexible stack 【Go specific】
Go has flexible stack • Stack for each goroutine •
Each stack grows and shrinks on demand ◦ Initialized with 4kB
Rough idea main goroutine main() stack frame a() stack frame
a2() stack frame a3() stack frame a4() stack frame m2() stack frame b() stack frame a goroutine b goroutine
Can Go still cause a stack overflow despite having a
flexible stack?
Flexible stack → No stack overflow?
No stack overflow? Stack overflow still exists in Go!
Because: Each goroutine has a stack size limit It’s defined
in the “runtime” package
Maximum stack size • Set to 1MiB on startup ◦
runtime/stack.go
Maximum stack size • Final size is defined when main
goroutine starts ◦ runtime/proc.go ◦ 250MB for 32bit, 1GB for 64bit
Let’s see an actual stack overflow! • Go says “fatal
error: stack overflow” ◦ 6 million+ functions were nested
Modifying the max size • Override with runtime/debug.SetMaxStack()
Modifying the max size • The same experiment with 8
MB of stack size ◦ Nested functions: 6 million -> 52,000
Wrapup Go’s stack does overflow
Thank you! Let’s have a nice conference!