Dynamic Linking: Global and Static Variables
Upon dynamic linking an application with modules containing global and static variables, various outcomes materialize depending on the dynamic linking mechanism employed.
Load-Time Dynamic Linking (Module A)
With this method, the operating system loads the DLL's section containing its globals and statics, which are then placed in the application's data segment.
Run-Time Dynamic Linking (Module B)
In this case, the application uses the LoadLibrary() function to load the DLL and must manually retrieve the addresses of global variables using GetProcAddress() or similar mechanisms.
Multiple Modules Using Shared Libraries
When multiple modules employ the same shared libraries, the operating system creates separate instances of their globals and statics for each process. This segregation ensures that the data of one module does not affect another.
DLL Access to Application Globals
DLLs do not directly access global variables defined in the application. However, they can export global variables through a syntax similar to function export, which enables other modules to link to them.
Unix-like Systems vs. Windows
The approach to extern global variables differs between Unix-like systems and Windows:
Conclusion
While dynamic linking provides flexibility, it also introduces complexities in handling global and static variables. The understanding of these mechanisms is crucial for effective code design and avoiding potential issues related to shared data.
The above is the detailed content of How Do Global and Static Variables Behave Under Different Dynamic Linking Mechanisms?. For more information, please follow other related articles on the PHP Chinese website!