虚拟内存抽象,进程的地址空间
2021/11/28 7:13:20
本文主要是介绍虚拟内存抽象,进程的地址空间,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
1.动态链接与静态链接区别
首先写一个main.c死循环程序
int mian() { while (1); }
进入main.c所在的目录下,打开一个终端,执行动态链接
gcc main.c
在此终端下进行静态链接
gcc -static main.c -o static.out
生成了可执行文件a.out static.out:
比较静态链接和动态链接的时间上的区别:
动态链接花费的时间比静态链接的时间更短。
分别打开两个终端,运行a.out static.out可执行程序,进入死循环状态;新建一个终端输入:top。找到两个程序的进程号
a.out的进程号是8175,在终端中输入pmap 8175(此时不要杀死死循环)
(base) bionic@bionic-DL:~$ pmap 8342 8342: ./static.out 0000000000400000 728K r-x-- static.out 00000000006b6000 24K rw--- static.out 00000000006bc000 4K rw--- [ anon ] 0000000001e23000 140K rw--- [ anon ] 00007ffc0e820000 136K rw--- [ stack ] 00007ffc0e8b8000 12K r---- [ anon ] 00007ffc0e8bb000 4K r-x-- [ anon ] ffffffffff600000 4K --x-- [ anon ] total 1052K (base) bionic@bionic-DL:~$ pmap 8175 8175: ./a.out 000055763c080000 4K r-x-- a.out 000055763c280000 4K r---- a.out 000055763c281000 4K rw--- a.out 00007fb0c3d43000 1948K r-x-- libc-2.27.so 00007fb0c3f2a000 2048K ----- libc-2.27.so 00007fb0c412a000 16K r---- libc-2.27.so 00007fb0c412e000 8K rw--- libc-2.27.so 00007fb0c4130000 16K rw--- [ anon ] 00007fb0c4134000 164K r-x-- ld-2.27.so 00007fb0c4306000 8K rw--- [ anon ] 00007fb0c435d000 4K r---- ld-2.27.so 00007fb0c435e000 4K rw--- ld-2.27.so 00007fb0c435f000 4K rw--- [ anon ] 00007ffcf307d000 136K rw--- [ stack ] 00007ffcf30b4000 12K r---- [ anon ] 00007ffcf30b7000 4K r-x-- [ anon ] ffffffffff600000 4K --x-- [ anon ] total 4388K
动态链接的地址空间中比静态链接的多了不少如00007fb0c3d43000 1948K r-x-- libc-2.27.so,就是libc动态链接出来的,rx文件。动态链接后的可执行文件小了很多。
2.pmap是如何实现的呢?
strace pmap 8175
pmap是打开map做read,打印信息
对proc作操作
(base) bionic@bionic-DL:~$ cat /proc/9169/maps 00400000-004b6000 r-xp 00000000 08:04 411558 /home/bionic/static.out 006b6000-006bc000 rw-p 000b6000 08:04 411558 /home/bionic/static.out 006bc000-006bd000 rw-p 00000000 00:00 0 01a13000-01a36000 rw-p 00000000 00:00 0 [heap] 7ffe41024000-7ffe41046000 rw-p 00000000 00:00 0 [stack] 7ffe41186000-7ffe41189000 r--p 00000000 00:00 0 [vvar] 7ffe41189000-7ffe4118a000 r-xp 00000000 00:00 0 [vdso] ffffffffff600000-ffffffffff601000 --xp 00000000 00:00 0 [vsyscall]
这篇关于虚拟内存抽象,进程的地址空间的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-12-26大厂数据结构与算法教程:入门级详解
- 2024-12-26大厂算法与数据结构教程:新手入门指南
- 2024-12-26Python编程入门指南
- 2024-12-26数据结构高级教程:新手入门及初级提升指南
- 2024-12-26并查集入门教程:从零开始学会并查集
- 2024-12-26大厂数据结构与算法入门指南
- 2024-12-26大厂算法与数据结构入门教程
- 2024-12-26二叉树入门教程:轻松掌握基础概念与操作
- 2024-12-26初学者指南:轻松掌握链表
- 2024-12-26平衡树入门教程:轻松理解与应用