カーネル モジュール (通常はデバイス ドライバー) が消費するメモリ量を見積もる際に、.ko (.bss、.data、.text など) の静的メモリ領域のサイズを示すsizeユーティリティを使用してみました。したがって、これらの値の合計は、モジュールを挿入した直後にlsmodコマンドによって得られる出力と正確に等しいと予想していました。
init() 関数では動的メモリ割り当て (kmalloc または vmalloc) が実行されないため、違いが生じていないことが保証されます。では、なぜ不一致があるのでしょうか?
不思議なことに、ほとんどの場合、ミスマッチは固定量であることがわかりました!!
コマンド出力は次のとおりです。
サイズ chardev.ko
text data bss dec hex filename
172 448 1024016 1024636 fa27c chardev.ko
lsmod
Module Size Used by Tainted: P
chardev 1025040 0 - Live 0xc009d000