如果一个程序运行了两个实例,那么有两个进程,这两个进程应该共享代码吧。但是网上虚拟地址空间的布局中,每个进程都有代码段。那么进程是怎么共享代码的?难道是后来产生的进程的代码段指向前面产生进程的代码段?
拥有18年软件开发和IT教学经验。曾任多家上市公司技术总监、架构师、项目经理、高级软件工程师等职务。 网络人气名人讲师,...
如果一個程式運行了兩個實例,很遺憾,這兩個程式的程式碼並不會共享,因為程式碼在程式執行時就被裝載到內存,第二個程式再啟動時,系統沒法判斷也不會判斷這個程式是否還是原來的程式(如果程式被更新或更改),所以仍然會把程式碼重新載入到記憶體的另一塊區域。
程式碼的共享體現應該是链接库中,特別是动态链接库中。因為函式庫被設計成動態連結的,所以程式可以在運行後再確定程式碼所在的記憶體位址,這也就能實現多個程式呼叫同一塊程式碼了。
链接库
动态链接库
如果一個程式運行了兩個實例,很遺憾,這兩個程式的程式碼並不會共享,因為程式碼在程式執行時就被裝載到內存,第二個程式再啟動時,系統沒法判斷也不會判斷這個程式是否還是原來的程式(如果程式被更新或更改),所以仍然會把程式碼重新載入到記憶體的另一塊區域。
程式碼的共享體現應該是
链接库
中,特別是动态链接库
中。因為函式庫被設計成動態連結的,所以程式可以在運行後再確定程式碼所在的記憶體位址,這也就能實現多個程式呼叫同一塊程式碼了。