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
静的ライブラリと 共有ライブラリの違いを実験で確認
Search
Satoru Takeuchi
PRO
December 27, 2024
Technology
0
19
静的ライブラリと 共有ライブラリの違いを実験で確認
以下動画のテキストです。
https://youtu.be/JYu85UZPzVE
Satoru Takeuchi
PRO
December 27, 2024
Tweet
Share
More Decks by Satoru Takeuchi
See All by Satoru Takeuchi
プロセスの生成 fork編
sat
PRO
0
11
ハイテク休憩
sat
PRO
2
180
利きプロセススケジューラ
sat
PRO
5
3.2k
俺とVSCode Python Debugger Extension
sat
PRO
1
200
コード再利用のしくみ ライブラリ
sat
PRO
3
67
AWKへの愛を語る
sat
PRO
3
540
syncコマンドのデータ同期 完了待ちやエラー検出
sat
PRO
0
110
動作中のLinux環境の全メモリを見る
sat
PRO
1
130
Linuxの時間を10秒止める
sat
PRO
2
220
Other Decks in Technology
See All in Technology
生成AIをより賢く エンジニアのための RAG入門 - Oracle AI Jam Session #20
kutsushitaneko
4
300
3年でバックエンドエンジニアが5倍に増えても破綻しなかったアーキテクチャ そして、これから / Software architecture that scales even with a 5x increase in backend engineers in 3 years
euglena1215
10
3.9k
型情報を用いたLintでコード品質を向上させる
sansantech
PRO
2
150
マイクロサービスにおける容易なトランザクション管理に向けて
scalar
0
190
Unlearn Product Development - Unleashed Edition
lemiorhan
PRO
2
120
日本版とグローバル版のモバイルアプリ統合の開発の裏側と今後の展望
miichan
1
140
C++26 エラー性動作
faithandbrave
2
830
React Routerで実現する型安全なSPAルーティング
sansantech
PRO
2
300
小学3年生夏休みの自由研究「夏休みに Copilot で遊んでみた」
taichinakamura
0
190
効率的な技術組織が作れる!書籍『チームトポロジー』要点まとめ
iwamot
2
140
Google Cloud で始める Cloud Run 〜AWSとの比較と実例デモで解説〜
risatube
PRO
0
120
スタートアップで取り組んでいるAzureとMicrosoft 365のセキュリティ対策/How to Improve Azure and Microsoft 365 Security at Startup
yuj1osm
0
240
Featured
See All Featured
Designing Experiences People Love
moore
138
23k
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
29
2.3k
Building Better People: How to give real-time feedback that sticks.
wjessup
366
19k
A Modern Web Designer's Workflow
chriscoyier
693
190k
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
6
530
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
29
920
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
26
1.9k
Speed Design
sergeychernyshev
25
680
How to train your dragon (web standard)
notwaldorf
88
5.7k
Building Adaptive Systems
keathley
38
2.3k
ReactJS: Keep Simple. Everything can be a component!
pedronauck
666
120k
Embracing the Ebb and Flow
colly
84
4.5k
Transcript
静的ライブラリと 共有ライブラリの違いを 実験で確認 Dec. 28th, 2024 Satoru Takeuchi X: satoru_takeuchi
1
はじめに • 静的ライブラリと共有ライブラリの違いを実験によって確認 • 事前知識が得られる動画 ◦ 📝 コード再利用のしくみ ライブラリ •
ソースコード ◦ https://github.com/satoru-takeuchi/youtube-sample/tree/master/0083-library • やること ◦ ある関数を定義したコードから静的ライブラリ、共有ライブラリを作る ◦ プログラムから2つのライブラリをリンクした場合の違いを確認する 2
登場人物 • main-static: 静的ライブラリlibtest.aからmultiplyという関数を呼び出す • main-dynamic: 動的ライブラリlibtest.soからmultiplyを呼び出す • libtest.{a,so}: 2つの引数を掛けた値を返す関数multiplyを定義する
3 main()のコード main-static (実行ファイル) multiply()のコー ド multiply()のコード libtest.a 共有ライブラリ multiply()のコード libtest.so main()のコード main-dynamic (実行ファイル) libtest.soを動的リ ンクしているという 情報 静的ライブラリ 他のライブラリ のコード リンク時に必要な メタデータ
確認事項 1. 動的リンク状況 a. ldd main-static b. ldd main-dynamic 2.
ライブラリファイルのサイズ a. ls -l libtest* 3. 実行ファイルのサイズ a. ls -l main-* 4
ライブラリファイルを削除するとどうなる? 1. rm libtest.a libtest.so 2. ./main-static 3. ./main-dynamic 5
main()のコード main-static (実行ファイル) multiply()のコー ド multiply()のコード libtest.a 共有ライブラリ multiply()のコード libtest.so main()のコード main-dynamic (実行ファイル) libtest.soを動的リ ンクしているという 情報 静的ライブラリ 他のライブラリ のコード リンク時に必要な メタデータ
ライブラリファイルを更新するとどうなる? 1. libtest.cを編集してmultiply()の定義を変更 2. ライブラリ再作成(make libtest.a libtest.so)後にプログラム実行 3. 実行ファイル再作成(make main-static,
main-dynamic)後にプログラム実行 6 main()のコード main-static (実行ファイル) multiply()のコー ド multiply()の 新しいコード libtest.a 共有ライブラリ multiply()の 新しいコード libtest.so main()のコード main-dynamic (実行ファイル) libtestfoo.soを動的 リンクしているという 情報 静的ライブラリ 他のライブラリ のコード リンク時に必要な メタデータ
まとめ 7 静的ライブラリ 共有ライブラリ ライブラリのサイズ 小さい 大きい ライブラリをリンクした プログラムのサイズ 大きい
小さい ライブラリファイルを 削除した後にプログラムは 動作するか 動作する 動作しない ライブラリファイルを 変更した後にプログラムの 動作は変化するか しない する