轉:動態連結程式庫的全域變數問題

來源:互聯網
上載者:User

標籤:style   http   ar   sp   strong   檔案   on   資料   問題   

動態連結程式庫的全域變數問題

請問動態連結程式庫被外部多次調用時,每次調用中動態庫自身的全域變數都會重新初始化嗎?如果會那怎麼來使我每次調用動態庫時都能從上次的狀態開始執行呢?


你這個問題得分被調用的是同一個進程還是不同的進程。如果是不同的進程,那麼你的動態串連庫就完全是重新載入的。因為動態串連庫是被映射到調用的那個進程的空間裡的,而不同的進程有不同的地址空間,所以不同進程調用同一個DLL基本就沒什麼關係,除非你聲明了一些變數在共用資料區段,這樣這些變數就會在不同的進程間共用。

如果你同一個進程多次LoadLibrary,就不一定會重新初始化,事實上Windows是這樣運作的。他為動態串連庫建立一個變數用來記錄被Load的次數,在一個進程中每次LoadLibrary這個引用計數就會加1,每次FreeLibrary這個引用記錄就會減1,當計數變為0時,Windows則完全釋放這個DLL,這時候你再一次載入,那麼所有初始化的工作就會重新來一遍。如果你載入已經在程式其他地方載入過的DLL,那麼就不會初始化。

儲存狀態可以儲存到檔案,儲存到註冊表等。
提問者評價
很詳細,謝謝啦!也謝謝其他熱心的朋友^_^

轉:動態連結程式庫的全域變數問題

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.