讀書筆記 crt靜態鏈結注意模組間記憶體傳遞

2021-07-04 18:11:49 字數 687 閱讀 3444

誰申請,誰釋放。

void exefunc()

pvoid dllfunc()

上面的**表示,在dll的函式dllfunc申請記憶體,而在exe的函式exefunc()中釋放,有問題嗎?

不一定。

結果與c/c++執行時庫的鏈結方式有關,在vs中就是 property - configuration properties - c/c++ - code generation - runtime library中的設定

這幾個選項詳細的意思很多地方都有介紹,這裡就不說了,只說一點就是,不帶dll的表示靜態鏈結執行時庫,當然,問題也就在這裡。

如果上面的exe和dll其中有乙個或者兩個都是靜態鏈結執行時庫,那麼上面的**會有問題。

crt(c執行時期庫)不是使用程序預設的堆來實現malloc(new中呼叫malloc)的,而是使用乙個全域性控制代碼handle _crtheap來分配記憶體的。這個_crtheap是在***crtstartup(crt提供的進口點函式)中建立的。 

由於crt靜態連線,則dll裡有也有乙個crt,因此也有乙個_crtheap。而在dll中的new使用dll中的_crtheap控制代碼分配堆,在exe中的delete使用exe中的_crtheap釋放堆,當然失敗!

new其實也會呼叫malloc

CSS 讀書筆記 05 鏈結

第五章 對鏈結應用樣式 1.簡單的鏈結樣式 1 錨型別選擇器 a 2 偽型別選擇器 錨可以作為內部引用,也可以作為外部鏈結。如 第乙個錨點選跳轉第二個錨位置。skip to main content 所以可以設定偽型別 未被訪問link,已訪問過visited a link a visited 懸停...

《注意力曲線》讀書筆記

生活在數字時代,最大的挑戰就是資訊洪流持續占有你的注意力。要麼無聊,要麼焦慮。合理的管理注意力變得非常重要。注意力是什麼?注意力是一種資源,它就像人的探照燈,你要選擇把它集中,照亮某個區域。控制注意力的核心是讓注意力盡量處於核心專區。如果不在的話,就把它拉回來。吻乙個漂亮姑娘還能穩穩的開車,說明這個...

Python Manual讀書筆記之模組匯入與過載

模組匯入與過載 模組,每乙個以副檔名.py結尾的python源 檔案都是乙個模組。其他的檔案可以通過匯入乙個模組讀取這個模組的內容。模組往往是變數名的封裝,被認做是命名空間。在乙個包中的變數名就是所謂的屬性,也就是說,屬性就是繫結在特定物件上的變數名。匯入從本質上講,就是載入另乙個檔案,並能讀取那個...