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
920
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
790
型落ちシンクライアント端末のPoEモジュールを自作したかった話
logica0419
0
730
The Journey of Connecting Japan to the Global Go Community
logica0419
1
180
Discovering Cilium: What eBPF Enabled in K8s Networking
logica0419
0
220
Do Gophers Dream of Stack Overflow?
logica0419
0
72
今こそ学びたいKubernetesネットワーク ~CNIが繋ぐNWとプラットフォームの「フラッと」な対話
logica0419
10
1.8k
キャリア科目では教えてくれない、就活を生き抜く法則
logica0419
2
370
歴史から学ぶ、Goのメモリ管理基礎
logica0419
18
5.4k
【2025改訂版】ITエンジニアとして知っておいてほしい、電子メールという大きな穴
logica0419
2
540
Other Decks in Programming
See All in Programming
GraphQL の onError と Nullability のこれから
quramy
0
210
Coding with AI: How to trust the storyteller (AWS Community Day Adria, Ljubljana 2026)
slobodan
0
140
PyConTW 2026 - AI Coding 不只是工具升級, 區域醫院醫療資訊系統協作開發與資訊團隊轉型實踐
cclai999
0
240
AI-Powered Domain-Driven Design
ziobrando
0
410
Vue.jsで作る空間解析アプリとCapacitorプラグインのData Bridge
hal_spidernight
1
170
조합이폭발하는디자인시스템이걸눈으로도테스트하라고요
giljongyu
0
730
LLM 101
dalinaum
0
470
Spec-driven Development with AI
simas
PRO
0
2.3k
SODA - FACT BOOK(JP)
sodainc
1
40k
Vapor Mode でアクセシビリティは 壊れないか検証した話
fuqda
1
330
AIがコードを書いてくれる時代、我々は何を確かめるのか
yosuke_furukawa
PRO
13
5.8k
AI時代のTerminal環境を UNIX哲学で設計・運用する
yasunori0418
1
350
Featured
See All Featured
Agile that works and the tools we love
rasmusluckow
331
22k
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
31
2.9k
Building Experiences: Design Systems, User Experience, and Full Site Editing
marktimemedia
1
660
Dominate Local Search Results - an insider guide to GBP, reviews, and Local SEO
greggifford
PRO
0
400
StorybookのUI Testing Handbookを読んだ
zakiyama
31
7k
How to Align SEO within the Product Triangle To Get Buy-In & Support - #RIMC
aleyda
2
1.9k
<Decoding/> the Language of Devs - We Love SEO 2024
nikkihalliwell
1
380
AI: The stuff that nobody shows you
jnunemaker
PRO
10
1.3k
The Anti-SEO Checklist Checklist. Pubcon Cyber Week
ryanjones
0
290
The B2B funnel & how to create a winning content strategy
katarinadahlin
PRO
1
610
The Language of Interfaces
destraynor
162
27k
The Art of Programming - Codeland 2020
erikaheidi
57
14k
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報告会、来てくださいね!!!