我在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是静态链接的。