當(dāng)動(dòng)態(tài)鏈接共享庫中的全局變量和靜態(tài)變量時(shí)會(huì)發(fā)生什么?我試圖理解當(dāng)具有全局變量和靜態(tài)變量的模塊動(dòng)態(tài)鏈接到應(yīng)用程序時(shí)會(huì)發(fā)生什么。通過模塊,我的意思是解決方案中的每個(gè)項(xiàng)目(我使用visual studio工作很多?。_@些模塊內(nèi)置于* .lib或* .dll或* .exe本身。我知道應(yīng)用程序的二進(jìn)制文件包含數(shù)據(jù)段中所有單個(gè)轉(zhuǎn)換單元(目標(biāo)文件)的全局和靜態(tài)數(shù)據(jù)(如果是const,則只讀取數(shù)據(jù)段)。當(dāng)此應(yīng)用程序使用帶有加載時(shí)動(dòng)態(tài)鏈接的模塊A時(shí)會(huì)發(fā)生什么?我假設(shè)DLL有一個(gè)全局和靜態(tài)的部分。操作系統(tǒng)是否加載它們?如果是這樣,他們?cè)谀睦锉患虞d?當(dāng)應(yīng)用程序使用帶有運(yùn)行時(shí)動(dòng)態(tài)鏈接的模塊B時(shí)會(huì)發(fā)生什么?如果我的應(yīng)用程序中有兩個(gè)使用A和B的模塊,則是如下所述創(chuàng)建的A和B的全局變量的副本(如果它們是不同的進(jìn)程)?DLL A和B是否可以訪問應(yīng)用程序全局變量?(請(qǐng)說明你的理由)引自MSDN:在DLL源代碼文件中聲明為全局的變量被編譯器和鏈接器視為全局變量,但加載給定DLL的每個(gè)進(jìn)程都獲得其自身的DLL全局變量副本。靜態(tài)變量的范圍僅限于聲明靜態(tài)變量的塊。因此,默認(rèn)情況下,每個(gè)進(jìn)程都有自己的DLL全局變量和靜態(tài)變量。從這里:當(dāng)動(dòng)態(tài)鏈接模塊時(shí),可能不清楚不同的庫是否有自己的全局變量實(shí)例或者是否共享全局變量。謝謝。
- 1 回答
- 0 關(guān)注
- 1282 瀏覽
添加回答
舉報(bào)
0/150
提交
取消