静态库与共享库的区别、进程、操作系统、内存

来源:互联网 发布:手机申请淘宝卖家 编辑:程序博客网 时间:2024/06/07 22:14
1. 静态库与共享库的区别
 图1
一些问题:
1)如果主机上没有libfoo.a 那么main程序能不能执行?
可以执行
2)如果foo库更新了,需要将原来的main.c重新编译生成main可执行程序
3)比使用共享库,程序要稍微大一点

2. 共享库
共享库在windows上叫做动态链接库
 图2
一些问题:
1) 如果主机没有libfoo.so,那么main程序是不能执行的。因为./main运行的时候才会去装载add方法
2) 如果更新了libfoo.so库,那么main程序

2.如果更新了libfoo.so库,那么main程序不需要重新编译,直接就可以使用新库。
3.由于库里的方法并没有包含在可执行程序中,所以,程序相对较小。
问题:如果库里有两个方法,而程序中只用到了一个方法,那么,在使用两种不同库的时候,是把两个方法都包含在内,还是只包含使用的那个方法?

4.nm main

nm命令可以查看程序中,变量和函数的地址。那么这是什么地址?逻辑地址?物理地址?

逻辑地址

查查查:逻辑地址  线性地址  物理地址  虚拟地址
3. 进程
操作系统管理进程,依靠PCB(进程控制块)
cpu、IO、内存由总线连接
计算机组成:cpu(运算器、控制器)、内存(存储器)、IO(输入输出设备)
总线:地址总线、数据总线、控制总线
程序由指令构成
4. 操作系统:管理软硬件资源,为用户提供一个交互的接口。
1) 串行处理  任务 == 进程
2) 批处理系统   不能换程序
3)多道程序设计    如果A程序阻塞了,可以换成B程序
这个过程也是硬件发展的结果
4)分时系统   
5.  内存:分页、分段、段页式、伙伴系统         1kb = 1024Byte(字节)
 图3
Q:引入虚拟内存以后,有什么不同?
6.  printf()打印情况:
1) 缓冲区放满了
2)没放满,但是强制刷新(比如加\n)
3)程序结束的时候(exit(0)   _exit(0):没有刷新缓冲区)
7.  主函数三个参数
比如:int main(int argc,char *argv[],char *envp[])
{

  // argc:传递给主函数的参数个数

//argv是一个代表参数自身的字符串数组  

//envp:环境变量,由父进程传给