繫結 約束 (binding)指兩個東西之間的關聯

2022-09-27 04:30:13 字數 1288 閱讀 5122

繫結/約束(binding)指兩個東西之間的關聯。如 名字 與它所代表的事物。又如屬性與實體之間的關聯,又或者符號與操作之間的關聯。

早期的書翻譯成約束,後期的多數稱繫結。後續都稱繫結。

繫結發生的時間稱為繫結時間(binding time)。

繫結 和 繫結時間 是程式語言中了個非常重要的概念。

綁程式設計客棧定可以發生在語言設計時、語言實現時、編譯時、連線時、載入時和執行時。

一、語言設計時

多數語言中運算子、流程控制結構、內部型別、物件的構造形式等都是在語言設計時決定的。

如星號(*)在語言設計時與乘法操作繫結。

二、語言實現時

多數語言手冊都留下了許多問題,要求語言的實現者去仔細考慮和決定如何實現?

如基本型別的精度(取值範圍),c中的int在實現時與取值範圍繫結。

又如 棧和堆得阻止方式和最大規模。

三、編譯時

編譯器選擇了如何將高階的結構對映到機器**,包括靜態定義的資料在記憶體裡的布局方式。

如j**a中的 變數 是在編譯時繫結於某特定的資料型別。

四、連線時

大部分編譯器支援「分別編譯」,聯結器根據各模組的情況選擇整體布局,並解決跨模組的相互引用關係。需要由聯結器把不同的模組集合一起。

五、載入時

指作業系統將程式設計客棧程式載入記憶體,使之能夠執行的那個時刻。

如j**a程式載入後變數與乙個儲存單元繫結。

六、執行時

這是個廣義的概念,它覆蓋了從程式執行開始到結束的這個時間跨度。

如變數與值的繫結發生執行時。但許多其它決策事項的情況則根據語言的不同而不同。

繫結又分為 靜態繫結 與 動態繫結。

靜態繫結/早繫結指在執行之前建立的繫結,且在整個程式執行過程期間保持不變。

動態繫結/晚繫結指在執行期間建立的繫結,且在執行過程中可被改變。

當然,靜態與動態都是很粗略的說法。因為執行時的概念本身就很廣泛,並不嚴格。

純編譯型語言(靜態語言),自然是早繫結的。它們效率更高,因為它們更早的做出了決策。

編譯器只對全域性變數的語法語義做一次分析,即程式未執行之前完成。在那時就已確定這些變數的在記憶體中的布局,並生成出發問它們的高效**。

純解釋型語言(動態語言),自然是晚繫結的。它們更靈活,因為它們把許多決策推遲到執行時才做。相應的其效率較低。

它可能在每次執行時分析一些宣告,甚至子程ikvflvmfr序每次呼叫時直譯器都要去分析區域性變數。

本文標題: 繫結/約束 (binding)指兩個東西之間的關聯

本文位址: /wangluo/xiangguanjiqiao/61371.html

兩個約束下的dp問題

洛谷p1510 分析 本質上還是乙個01揹包,將體力當做重量,體積當做價值。配上滾動陣列 即dp j 代表在體力耗費為j時最大能搬運多少體積的石頭,當dp j v時就說明存在滿足情況的解,這樣,就選擇最小的j就可以了 includeusing namespace std typedef long l...

DD WRT埠繫結兩個埠合併頻寬

埠繫結 dd wrt還提供了埠繫結功能,我們可以讓無線路由器的兩個埠合併頻寬,這樣可以最大限度地提高網路速度 而且如果將這台無線路由器和其他裝置連線的話,埠繫結還可以提供一定的線路冗餘功能,也就是說當乙個埠或乙個線路出現故障以後網路依然能保持暢通。dd wrt只支援 三 四兩個lan口的埠繫結。第一...

劍指offer 05兩個棧構建佇列,兩個佇列構建棧

用兩個棧來實現乙個佇列,完成佇列的push和pop操作。佇列中的元素為int型別。js裡用陣列可以模擬棧 push pop,也可以模擬佇列push,shift 資料存放在其中乙個棧裡面,push操作直接push,pop操作,先把有資料的棧全部pop出來,並push到另乙個陣列裡面,這樣直接pop,就...