为什么libpython3.6..so比python2.7可执行文件大得多?

时间:2018-12-07 00:08:21

标签: python python-3.x

我在Ubuntu中有python2.7和python3.6,都是从apt-get安装的。

我发现python2.7只有3.4M,但是python3.6约为12M,为什么会有如此大的差异?

以下是命令:

bash-4.3$ ls -lh `which python2.7`
-rwxr-xr-x 1 root root 3.4M Nov 13 03:46 /usr/bin/python2.7

bash-4.3$ ls -lh `which python3.6`
-rwxr-xr-x 2 root root 18K May  5  2018 /usr/local/bin/python3.6

似乎python3.6可执行文件使用动态链接,因此我使用pamp来找到.so文件:

00007fdf14242000    2668 r-x-- 0000000000000000 008:00001 libpython3.6m.so.1.0
00007fdf144dd000    2044 ----- 000000000029b000 008:00001 libpython3.6m.so.1.0
00007fdf146dc000      12 r---- 000000000029a000 008:00001 libpython3.6m.so.1.0
00007fdf146df000     408 rw--- 000000000029d000 008:00001 libpython3.6m.so.1.0

它是libpython3.6m.so.1.0,然后我检查了它的文件大小:

bash-4.3$ ls -lh /usr/local/lib/libpython3.6m.so.1.0
-r-xr-xr-x 1 root root 12M May  5  2018 /usr/local/lib/libpython3.6m.so.1.0

1200万,为什么这么大?

我也感到困惑的是,libpython3.6m.so.1.0在虚拟地址空间中仅占用(2668k + 2044k =)4.7M,其他7.3M在哪里?

谢谢。

PS:我还用pmap检查了python2.7的地址空间,没有找到python的动态库,所以我认为python2.7是静态链接的。

0 个答案:

没有答案