作者:拂袖方言_633 | 来源:互联网 | 2023-09-17 15:15
动态链接库与共享内存:我们知道,动态链接库(在windows上表现为.dll,在linux下表现为.so)采用的是延迟加载机制,即程序在运行的过程中在被调用的时候才会被加载。一个动
动态链接库与共享内存:
我们知道,动态链接库(在windows上表现为.dll,在linux下表现为.so)采用的是延迟加载机制,即程序在运行的过程中在被调用的时候才会被加载。一个动态库在内存中只存在一份,可以被多个进程共享。这样做很明显可以节省内存空间。
那么问题来了:共享内存在内存中也是只存在一份,也可以被多个进程共享。在不同的进程中,共享的那段内存的被分配的地址会有所不同。那么,同样是在内存中只存在一份,同样是可以被其他进程共享,动态链接库和共享内存的区别在哪呢?
区别就在于:多个程序虽然可以共享同一个动态链接库中的相同代码,但每一个进程都为动态链接库使用的全部数据分配了自己的地址空间。而共享内存是代码和数据均被多个程序所共享。动态链接库只是实现了代码的复用,对于数据,各个程序要自己保存。共享内存用于进程间通信,主要用于数据的内存共享。这也从侧面反映出动态链接库并不能用于实现进程之间通信。
动态链接库与共享内存: