關於Windows API CRT和STL二三事

2021-09-08 17:58:03 字數 1025 閱讀 2741

20世紀的幼稚的ansi程式,把一切非英語字元都轉換為'?'。

上面這個表中,模組1以靜態的方式連線到crt,而模組2和3則以動態的方式連線到crt,模組2和3之間可以相互傳遞crt所用有的物件。例如,模組3使用malloc所分配的一段記憶體空間可以由模組2釋放,因為對malloc和free的呼叫都是由同乙個crt物件實現的。

但是,模組1的資源就很難由其他模組釋放。模組1所占有的每個資源都應該由它自己來釋放。因為模組1是以靜態的方式鏈結到crt的乙個例項。上面圖中的模組2就必須通過呼叫模組1所提供的函式來釋放它通過模組1所獲取的記憶體空間。

3.2 動態鏈結

如果通過動態鏈結的方式鏈結到crt/c++庫,則程式執行時只需要把很小一部分需要的導入庫鏈結到程式中。這些導入庫包含了說明crt/c++的相應的函式的具體的實現的位址所在。程式啟動時,程式會根據這些指令的說明把一些相關的dll載入程序式的記憶體空間中來。

優點:1.容易實現模組化。就像前面所述的那樣,乙個程式可以通過動態鏈結很方便的實現模組化。乙個程式可以很方便的劃分為若干個模組,並且各個模組之間可以很方便的共享比較高階的物件資料。

2. 更快的啟動。系統啟動時已經載入了這些crt dll,所以當使用這些dll的程式啟動時就無需在載入這些dll了,而且這不僅節省了記憶體空間,更節省了頁交換的時間。

缺點:1.部署起來比較複雜。這些crt庫必須被重新被分配一遍,而且為了乙個程式能夠工作,這些庫在記憶體中必須有序地放置。這就需要乙個額外的啟動專案,並且部署的時候要小心謹慎。

4. 總結

本文大體上介紹了windows api、crt和stl相互之間的關係和依賴順序。對於使用者態的程式來說,windows api是可以用到的計算機的最低一層。處於windows api之上的則是c的動態執行庫,它對作業系統進行了封裝,並隱藏了不同的作業系統之間的差異。標準c++庫則提供了更多的功能,並且把crt作為它的一部分。通過標準的函式以及相關類可以寫出跨平台的程式,這個程式只需在新的平台上重新編譯一次發布出來,**不需要改動。

根據應用程式的客觀需要,它可以靜態活動態的鏈結到c執行時程式庫和標準c++程式庫。每種方法都有它自己的優缺點。

關於程式關於世界

首先,在學了1年多的軟體設計的基礎上,問下自己 程式是什麼?業務需求是什麼?程式有什麼用?什麼是演算法?什麼是資料庫?或許每個人的理解不同,會給出不同的答案。那麼自己的理解 程式是乙個讓計算機工作的流程,在程式寫好之後,計算機就會按照,程式設計師定義好流程在執行。其實很多時候,乙個程式的好壞,在於乙...

關於血液關於軟體

1 自然沉降法 將血袋垂直吊掛於4 2 冰箱內,使紅細胞自然下沉1 3d,或將血袋呈70 80 角立於冰箱,需用時,用一次性分漿器分出血漿,制得濃縮紅細胞。2 洗滌法 一般用生理鹽水反覆洗滌3 6次。經洗滌的紅細胞,除白細胞和血小板減少外,血漿蛋白也極少,紅細胞中殘存的血漿蛋白含量約為原總蛋白的1 ...

關於冷漠,關於愛情

我不知道為什麼今天又莫名其妙開始思考愛情這件事,隨之就解決了我一直無法面對冷漠這件事 被冷漠是我始終無法消化的一件事,每當遇見冷漠時,我總會覺得就像一團火把自己燒得面目全非,但對方卻毫無傷害。但我突然懂了,遇到冷漠時,體面的離開即可 在乎你的人一定會在你離開後,找到你跟你解釋為什麼 連解釋都來不及,...