初歩的な質問ですいません。。

# include <stdio.h>
と書くと、/usr/include/stdio.hを読み込むというのは分かりました。
しかしprintf関数の実際の定義はどこにあるのですか?
/usr/lib/の中を探してもそれらしいファイルがありません。
/usr/lib/libc.soというのが怪しいですが、これは関係ないでしょうか。

あと、# include <math.h>とした時は、コンパイル時に
# gcc sample.c -lm
のようにリンクが必須なのに、どうしてstdioは必要無いのですか?