1、内存分配图
代码段:存放二进制代码
数据段:文字常量区(字符串常量)+静态区(全局变量和static变量)
堆区:程序员分配释放
栈区:编译器分配和释放
2、static作用
a.c中定义的全局变量a和函数msg能在main.c中使用,未加static前缀的全局变量和函数都具有全局可见性,如果加了static,就会对其它源文件隐藏
存储在静态数据区的变量会在程序刚开始运行时就完成初始化,也是唯一的一次初始化
3、Vfork和fork 区别
fork:子进程和父进程使用相同的代码段;子进程复制父进程的堆栈段和数据段
vork:不将父进程的地址空间完全复制到子进程中;保证子进程先运行
4、个程序至少有一个进程,一个进程至少有一个线程;进程在执行过程中拥有独立的内存单元,而多个线程共享内存;线程是进程的一个实体,是CPU调度和分派的基本单位;进程是死的,只是一些资源的集合,真正的程序执行都是线程来完成的
5、Linux下的进程间通信
管道:无名管道和有名管道、前者用于父进程和子进程间的通信,后者用于运行于同一台机器上的任意两个进程间的通信。
消息队列:管道很相似、很少用
共享内存:进程间通信最快的方式、通常由一个进程创建一块共享内存区,其余进程对这块内存区进行读写
信号量: