基于2.6.32内核
一、现象
在x86_64的64位操作系统环境下,一个程序执行coredump,从coredump文件可以看到,导致coredump的问题是由于执行new操作时分配内存失败导致的。这个问题看起来让人有些莫名惊诧,用掉64bit下的所有虚拟地址空间,这是什么概念(这个惊诧可以用莱芜战役后国民党第二绥靖区司令长官王耀武的一句话来类比:“五万多人,三天就被消灭光,就是放五万头猪,叫共军抓,三天也抓不完”。而我当时的心情是“五万只草泥马"奔腾而过了)?还是现网在运行的程序。通过readelf -e查看coredump文件挂掉时内存布局,可以看到内存布局的确十分紧致,机会没有空闲的虚拟地址空间。coredump文件显示了0xfefff000位地址空间,也就是进程空间上限接近4G,下限为0x00048000。这一点和通常的32bit地址空间不同,因为32bits下用户地址空间的上限是3G。不过readelf的输出也的确是显示了进程的"Machine: Intel 80386",也就是一个在x86_64环境下运行的32bits二进制文件。
在x86_64的64位操