欧美vvv,亚洲第一成人在线,亚洲成人欧美日韩在线观看,日本猛少妇猛色XXXXX猛叫

新聞資訊

    這是和類Unix系統之間非常著名的區別。

    無論:

    每個進程都有自己的地址空間,這意味著進程之間永遠不會共享任何內存(除非您使用某些進程間通信庫或擴展)。

    單一定義規則(ODR)仍然適用,這意味著您只能在鏈接時(靜態或動態鏈接)顯示全局變量的一個定義。

    所以,這里的關鍵問題是能見度。

    在所有情況下,()全局變量(或函數)從模塊外部(dll / so或可執行文件)永遠不可見。 C ++標準要求它們具有內部鏈接,這意味著它們在定義它們的轉換單元(它成為目標文件)之外是不可見的。 所以,這解決了這個問題。

    它變得復雜的地方是你有()全局變量。 在這里,和類Unix系統完全不同。

    對于(.exe和.dll),()全局變量不是導出符號的一部分。 換句話說,不同的模塊無法識別其他模塊中定義的全局變量。 這意味著,如果您嘗試創建應該使用DLL中定義的()變量的可執行文件,則會出現鏈接器錯誤,因為這是不允許的。 您需要提供一個對象文件(或靜態庫),其中包含該變量的定義,并將其與可執行文件和DLL靜態鏈接,從而生成兩個不同的全局變量(一個屬于可執行文件,另一個屬于DLL))。

    要在中實際導出全局變量,必須使用類似于函數 / 語法的語法,即:

    #ifdef

    # "C" ()

    #else

    # "C" ()

    #endif

    int ;

    執行此操作時,全局變量將添加到導出符號列表中c標準庫有靜態和動態庫,并且可以像所有其他函數一樣進行鏈接。

    在類Unix環境(如Linux)的情況下,動態庫稱為“共享對象”,擴展名為(),導出所有()全局變量(或函數)。 在這種情況下,如果從任何地方到共享對象文件進行加載時鏈接,則全局變量被共享,即c標準庫有靜態和動態庫,作為一個鏈接在一起。 基本上,類似Unix的系統旨在使其與靜態或動態庫鏈接之間幾乎沒有區別。 同樣,ODR全面適用:()全局變量將在模塊之間共享,這意味著它應該在所有加載的模塊中只有一個定義。

    最后,在這兩種情況下,對于或類Unix系統,您可以執行動態庫的運行時鏈接,即使用()/()/()或()/dlsym() / ().在這種情況下,您必須手動 獲取指向您希望使用的每個符號的指針,其中包括您要使用的全局變量。 對于全局變量,只要與函數相同,就可以使用()或dlsym(),前提是全局變量是導出符號列表的一部分(按前面段落的規則)。

    當然,作為必要的最終說明:應該避免全局變量。 我相信你引用的文字(關于“不清楚”的東西)正是指我剛才解釋的特定于平臺的差異(動態庫并沒有真正由C ++標準定義,這是特定于平臺的領域,這意味著它 不太可靠/便攜)。

網站首頁   |    關于我們   |    公司新聞   |    產品方案   |    用戶案例   |    售后服務   |    合作伙伴   |    人才招聘   |   

友情鏈接: 餐飲加盟

地址:北京市海淀區    電話:010-     郵箱:@126.com

備案號:冀ICP備2024067069號-3 北京科技有限公司版權所有