Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
Go言語はstack overflowの夢を見るか?
Search
Takuto Nagami
October 14, 2025
Programming
900
2
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Go言語はstack overflowの夢を見るか?
2025/10/14 Go Night Talks – After Conferenceにて登壇した際の資料です。
Takuto Nagami
October 14, 2025
More Decks by Takuto Nagami
See All by Takuto Nagami
GopherCon @シアトル に行ってきました
logica0419
0
580
型落ちシンクライアント端末のPoEモジュールを自作したかった話
logica0419
0
590
The Journey of Connecting Japan to the Global Go Community
logica0419
1
120
Discovering Cilium: What eBPF Enabled in K8s Networking
logica0419
0
120
Do Gophers Dream of Stack Overflow?
logica0419
0
59
今こそ学びたいKubernetesネットワーク ~CNIが繋ぐNWとプラットフォームの「フラッと」な対話
logica0419
10
1.4k
キャリア科目では教えてくれない、就活を生き抜く法則
logica0419
2
320
歴史から学ぶ、Goのメモリ管理基礎
logica0419
17
4.4k
【2025改訂版】ITエンジニアとして知っておいてほしい、電子メールという大きな穴
logica0419
2
350
Other Decks in Programming
See All in Programming
Vibes Containers 〜AIで変わるコンテナ設計と運用〜
tkikuc
3
550
WebMCP Challenge に星空観察アプリで参加した話
okajun35
0
170
thread_parallel_with_free-threaded_Python_and_NumPy.pdf
riku_sakamoto
0
330
[DroidKaigi 2026] Bring your own phones to Gradle Managed Devices
f2lk
0
120
AWS DevOps Agentで インシデント対応をAIに任せたい
honmarkhunt
7
2.9k
Claude Codeを組織的に動かして月400PRを実現した話
happy_ryo
0
280
Java 27新機能 / Java 27 new features
kishida
2
140
DroidKaigi 2026 「個人開発という実験場: Android エンジニアが手にする4つの自由」
slashnephy
0
230
AIは賢い。でも実行環境は? CLIおじさんがAI時代に伝えたいこと ~ CLIおじさんがAI時代に伝えたいこと ~
curekoshimizu
1
240
標準パッケージに uuid が追加された 背景から見る Go らしい意思決定 / go_127_uuid_decision
convto
5
7.1k
新卒PdEのリアル
ryu1013
1
500
モバイル交通系ICへのチャージ実例から考える、クロスプラットフォーム開発におけるiOS実機テスト設計とCI運用
yusuga
1
470
Featured
See All Featured
Digital Ethics as a Driver of Design Innovation
axbom
PRO
1
420
DBのスキルで生き残る技術 - AI時代におけるテーブル設計の勘所
soudai
PRO
68
57k
jQuery: Nuts, Bolts and Bling
dougneiner
66
8.6k
Learning to Love Humans: Emotional Interface Design
aarron
275
41k
Building a A Zero-Code AI SEO Workflow
portentint
PRO
0
720
Site-Speed That Sticks
csswizardry
13
1.5k
Jess Joyce - The Pitfalls of Following Frameworks
techseoconnect
PRO
1
410
For a Future-Friendly Web
brad_frost
183
10k
How to Think Like a Performance Engineer
csswizardry
28
2.8k
Rails Girls Zürich Keynote
gr2m
96
14k
Redefining SEO in the New Era of Traffic Generation
szymonslowik
1
420
Measuring Dark Social's Impact On Conversion and Attribution
stephenakadiri
2
280
Transcript
Takuto Nagami @logica0419 Go言語は stack overflowの 夢を見るか?
自己紹介 • Takuto Nagami • 千葉工業大学 情報科学部 情報ネットワーク学科 4年 •
Gophers EXの発起人/代表 • 最近Goでやった/やること ◦ Go Conference パネラー登壇 ◦ Go 1.25 リリパ 登壇 (Green Tea) ◦ GopherCon Tour 報告会 (予定、後で宣伝) ◦ Go West Conference 英語登壇 (予定)
BIG NEWS!!!!! (先週) • Go 1.26でのGreen Tea GCデフォルト化がほぼ確定🎊
BIG NEWS!!!!! (先週) • Go 1.26でのGreen Tea GCデフォルト化がほぼ確定🎊
Stack overflow、ご存知ですか?
Stack overflow、ご存知ですか? 今回はこれではないです
スタック(とヒープ)
アプリケーションから見たメモリ . . . • Key-value storeの形で表される ◦ Key: Memory
address ◦ Value: 各アドレス1バイト • ほとんどの高級言語は、変数を メモリに格納する時、スタック とヒープの2つの領域を(言語側 で作って)使い分ける 0x0000 0x0001 0x0002 0x0003
. . . スタック
. . . main() stack frame スタック
. . . main() stack frame 5 スタック {v addr}
. . . main() stack frame 5 a() stack frame
スタック {v addr}
. . . main() stack frame 5 a() stack frame
5 スタック {arg addr} {v addr}
. . . main() stack frame 5 a() stack frame
5 7 スタック {arg addr} {a addr} {v addr}
. . スタック main() stack frame 5 a() stack frame
{arg addr} {a addr} {v addr} 5 7 b() stack frame
. . スタック main() stack frame 5 a() stack frame
{arg addr} {arg addr} {a addr} {v addr} 5 7 b() stack frame 7
. . スタック main() stack frame 5 a() stack frame
{arg addr} {b addr} {arg addr} {a addr} {v addr} 5 7 b() stack frame 7 1
. . . スタック main() stack frame 5 a() stack
frame {arg addr} {a addr} {v addr} 5 7
. . . スタック main() stack frame 5 {v addr}
. . . スタック プログラム終了
スタックが苦手なデータ • コンパイル時にサイズが決まらないデータ ◦ slice・mapなど ◦ スタックはコンパイル時に全て定義される ▪ 動的にサイズを変えるのは効率が悪い •
複数の関数でまたがって使うデータ ◦ グローバル変数など こういうのがヒープに入ります (詳細は割愛)
Stack overflow (原義)
スタックには上限がある(こともある) • 歴史的経緯で、C言語などではスタックに上限がある ◦ Linuxのデフォルトだと8MB
スタックの上限を突破すると… • 関数のネストし過ぎなどで上限を突破する
スタックの上限を突破すると… • 関数のネストし過ぎなどで上限を突破する → Stack overflow!!
【Go特有】 可変サイズのスタック
Go言語のスタックは伸び縮みする • Go言語のスタックはgoroutineごとに作られる ◦ goroutineが特殊と言われる理由の一つ • それぞれのスタックに大きな容量を確保できないので それぞれが伸び縮みする ◦ 4kBで作られ、関数が多くネストされたら勝手に
大きくなる ◦ Stack Copyingという手法、詳細は割愛
イメージ 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
【本題】 Goでstack overflow って起こるの?
スタックが伸び縮みする → stack overflowが 起こらないのでは? 皆さんもそう思いましたよね?
結論 起こります
理由: goroutineごとにスタックの 最大サイズがあるから runtimeパッケージで定義されています
goroutineごとのスタック最大サイズ • プログラム起動時は一旦1MiBで仮置きされる ◦ runtime/stack.go ◦ main goroutineが起動するまでこれが使われる
goroutineごとのスタック最大サイズ • main goroutine起動時に32bit/64bitで場合分け ◦ runtime/proc.go ◦ 32bitなら250MB、64bitなら1GB
実際に起こしてみよう! • fatal error: stack overflow が実際に起きた ◦ ネストされた関数は 670万超
スタック最大量の変更 • runtime/debug.SetMaxStack() で変更可能!
スタック最大量の変更 • 8MBに設定して同じことをやってみる ◦ ネスト数は 670万超 → 5万2千程度に
まとめ Goもstack overflowします
ありがとうございました & 宣伝 GopherCon Tour報告会、来てくださいね!!!