導航:首頁 > 源碼編譯 > c中委託被編譯後的結構

c中委託被編譯後的結構

發布時間:2025-01-23 11:07:43

『壹』 什麼是委託委託和事件是什麼關系

簡單的說,委託就是一個方法容器,可以載入多個具有相同簽名的方法引用地址。 調用委託相當於同時調用容器中的所有方法。 委託可以將方法作為參數傳遞給方法。 事件是特殊的代表
拓展資料
一、事件的定義是比較有意義的,會對一定的人群產生一定的影響。 在物理學中,事件是由其時間和空間指定的時間和空間中的一個點。 事件由信息子安排引發。事件又稱隨機事件,是概率論的基本概念之一。 它是隨機現象的表達,是一些基本事件組成的集合。 事件一般用大寫字母A、B、C表示,表示事件A發生當且僅當A中包含的基本事件發生。
二、委託是定義方法類型的類,以便方法可以作為另一個方法的參數傳遞。 這種將方法動態分配給參數的方法,可以避免程序中大量使用if else(switch)語句,使程序更具擴展性。使用委託,您可以將多個方法綁定到同一個委託變數。 在調用這個變數時(這里用「call」這個詞是因為這個變數代表一個方法),可以依次調用所有綁定的方法。
三、事件本身是一個委託。 c編譯後,就是私有委託。 添加和刪除方法被添加。 事件比委託有更深層次的控制,它規定它們只能在生產者內部調用。
四、什麼是事件委託?
事件委託也稱為事件委託。是 JavaScript 中綁定事件的常用技術。顧名思義,「事件代理」是指將原本綁定在子元素上的響應事件委託給父元素,讓父元素起到監聽事件的作用。事件代理的原理是 DOM 元素的事件冒泡。
五、舉個通俗的例子:比如一個宿舍的學生同時到達,一種方式是讓他們一個一個去取。另一種方式是將事情委託給宿舍負責人,讓一個人出去把快遞全部拿到,然後根據收件人的情況一個一個地分發給每個宿舍的學生;
在這里,接受快遞是一件大事。每個學生指的是需要響應事件的DOM元素,出門收快遞的宿舍長就是agent元素。因此,該元素確實與事件綁定。根據收件人分發快遞的過程是在事件執行過程中,您需要確定當前響應事件應該匹配哪一個或幾個代理元素。
六、當一個事件被觸發時,它會在子元素和父元素之間傳播。這種交流分為三個階段。
(1)捕獲階段:從窗口對象到目標節點(從上層到下層)的傳輸稱為「捕獲階段」,捕獲階段不會響應任何事件;
(2) 目標階段:在目標節點上觸發,稱為「目標階段」
(3) 冒泡階段:將窗口對象從目標節點(從底層到頂層)導回,稱為冒泡階段。事件代理就是利用事件冒泡機制將內層需要響應的事件綁定到外層。

『貳』 c璇璦緇忚繃緙栬瘧鍚庣敓鎴愭枃浠剁殑鍚庣紑鏄

C璇璦緇忚繃緙栬瘧鍚庣敓鎴愭枃浠剁殑鍚庣紑鏄鈥.obj鈥濄

褰揅璇璦婧愪唬鐮佽緙栬瘧鍚庯紝閫氬父浼氱敓鎴愪竴涓鈥.o鈥濓紙object file錛夋枃浠躲傝繖涓鏂囦歡鍖呭惈浜嗙紪璇戝櫒鎵浜х敓鐨勬満鍣ㄤ唬鐮侊紝浣嗘槸瀹冭繕娌℃湁琚榪炴帴鍒板叾浠栨ā鍧楁垨搴撲腑銆傜浉搴斿湴錛屽湪涓嶅悓鐨勬搷浣滅郴緇熶笂鍙鑳戒細鏈変笉鍚岀殑鍚庣紑鍚嶅拰浜岃繘鍒舵牸寮忋備緥濡傦紝Windows涓婄殑Visual C++緙栬瘧鍣ㄤ嬌鐢ㄢ.obj鈥濅綔涓虹洰鏍囨枃浠剁殑鎵╁睍鍚嶃

闄や簡鐩鏍囨枃浠朵箣澶栵紝榪樻湁鍏朵粬綾誨瀷鐨勬枃浠朵篃鍙鑳藉湪緙栬瘧榪囩▼涓鍑虹幇銆備緥濡傦紝婧愭枃浠跺寘鍚浜嗕唬鐮佺殑鍘熷嬫枃鏈錛涘ご鏂囦歡鍖呭惈浜嗙▼搴忎腑浣跨敤鍒扮殑鍑芥暟鍜屽彉閲忕殑澹版槑銆傝繖浜涙枃浠舵墿灞曞悕閫氬父涓衡.c鈥濆拰鈥.h鈥濄

C璇璦鐨勪紭鐐圭畝榪

C璇璦鐨勮捐$洰鏍囨槸鎻愪緵涓縐嶈兘浠ョ畝鏄撶殑鏂瑰紡緙栬瘧銆佸勭悊浣庣駭瀛樺偍鍣ㄣ佷粎浜х敓灝戦噺鐨勬満鍣ㄧ爜浠ュ強涓嶉渶瑕佷換浣曡繍琛岀幆澧冩敮鎸佷究鑳借繍琛岀殑緙栫▼璇璦銆侰璇璦鎻忚堪闂棰樻瘮奼囩紪璇璦榪呴熴佸伐浣滈噺灝忋佸彲璇繪уソ銆佹槗浜庤皟璇曘佷慨鏀瑰拰縐繪嶏紝鑰屼唬鐮佽川閲忎笌奼囩紪璇璦鐩稿綋銆侰璇璦涓鑸鍙姣旀眹緙栬璦浠g爜鐢熸垚鐨勭洰鏍囩▼搴忔晥鐜囦綆10%鈥20%銆傚洜姝わ紝C璇璦鍙浠ョ紪鍐欑郴緇熻蔣浠躲

褰撳墠闃舵碉紝鍦ㄧ紪紼嬮嗗煙涓錛孋璇璦鐨勮繍鐢ㄩ潪甯鎬箣澶氾紝瀹冨吋欏句簡楂樼駭璇璦鍜屾眹緙栬璦鐨勪紭鐐癸紝鐩歌緝浜庡叾浠栫紪紼嬭璦鍏鋒湁杈冨ぇ浼樺娍銆傝$畻鏈虹郴緇熻捐′互鍙婂簲鐢ㄧ▼搴忕紪鍐欐槸C璇璦搴旂敤鐨勪袱澶ч嗗煙銆傚悓鏃訛紝C璇璦鐨勬櫘閫傝緝寮猴紝鍦ㄨ稿氳$畻鏈烘搷浣滅郴緇熶腑閮借兘澶熷緱鍒伴傜敤錛屼笖鏁堢巼鏄捐憲銆侰璇璦鎷ユ湁緇忚繃浜嗘極闀垮彂灞曞巻鍙茬殑瀹屾暣鐨勭悊璁轟綋緋伙紝鍦ㄧ紪紼嬭璦涓鍏鋒湁涓捐凍杞婚噸鐨勫湴浣嶃

『叄』 C語言代碼組成 - BSS、Data、Stack、Heap、Code、Const

一段C語言經過編譯連接後,成為一段可以運行的代碼,可運行的代碼可以分為以下四個部分組成:全局變數/靜態變數區、堆、棧、代碼區。其中全局變數/靜態變數區又分為未初始化變數區和初始化變數區,代碼區又分為代碼和常量區。即匯總下來,代碼可以分為6部分組成,包括:BSS區(未初始化的全局變數/靜態變數區)、Data區(實始化的全局變數區)、Stack區(棧區)、heap區(堆區)、Code區(代碼區)、const區(常量區)。

一、BSS區和Data區

C語言編程中定義的全局變數、靜態局部變數,就是分配在全局變數/靜態變數區域,但是為什麼又要分為BSS區域和Data區域呢?其實我們在定義全局或者靜態變數區,有時我會對它賦初始值,有的又不會賦初始化,比如我們定義的全局變數,初始化的賦值,是怎麼樣寫到變數區域中的,我們定義的靜態局部變數,在定義時初始化後,為什麼後面函數被調用,又不會再初始化呢?這個局部靜態變數是怎麼樣實始化的,什麼時候初始化的?

如果分析編譯後的匯編代碼,就會發現在代碼運行起來後,會有一段給變數賦值的指令,這一段代碼,不是我們C代碼對應的匯編,而是C編譯器生成的匯編譯代碼,這段代碼的作用就是給初始化了的靜態變數和全局變數進行初始化。這也是為什麼全局/靜態變數區域,要分BSS和Data的原因。

二、Stack區

棧是一種先進後出的數據結構,這種數據結構正好完美的匹配函數調用時的模型過程,比如函數f(a)在運行過程中調用函數f(b),f(a)在運行過程中的變數就是分配在棧中,通過在調用f(b)前,會將代碼中用到的R0~Rn寄存器的值保存到棧中,同時將函數的傳入參數寫入到棧中,然後進入f(b)函數,函數f(b)的變數b分配在棧中,當函數運行完畢後,釋放變數b,將棧中存放的f(a)函數的運行的R0~Rn寄存器值恢復到寄存器中,同時f(b)的返回結果存入到棧中,這樣f(a)繼續運行。當一個函數運行完畢後,它在棧中分配的臨時變數會全部釋放。

對於中斷也是一樣的,中斷發生時,也是一個函數打斷了另一個函數的運行,這種現場的保存(即寄存器的值),都是通過棧來完成的。所以棧的作用有:

三、Heap區

全局變數分配的內存在代碼整個運行周期內都是有效的,而在棧區分配的內存在函數調用完成後,就會釋放。這兩種內存模型都是由編譯器決定它的使用,代碼是無法控制的。那有沒有內存是由用戶控制的,要用時,就自由分配,不用時,就自行釋放?答案是肯定的,這部分內存就是堆。

用戶需要使用的動態內存,就是通過malloc函數,調用分配的,在沒有釋放前,可一直由代碼使用。當這部分內存不再需要使用時,可以通過free函數進行釋放,將它歸還到堆中。從這中可以看出,堆的內存,是按需分配的。這就是賦予了代碼很大的自由度,但這也是會帶來負作用的,比如:內存碎片化導致的malloc失敗;忘記釋放內存導致的內存泄露,而這些往往是致命的失誤。

四、Code區

代碼區就是編譯後機器指令,這些指令決定了功能的執行。我們編譯的代碼一般是下載進flash中,但是運行,卻有兩種方式:在RAM中運行和在ROM中運行。 在RAM中運行,即是boot啟動後,將flash中的代碼復制到RAM中,然後PC指針在指到RAM中的代碼中開始運行。 有時在調試時,我們可以直接將代碼下載進RAM中運行進行調試,這樣加快調試速度。便是大部分的情況我們的代碼是從flash中開始運行的。

五、常量區

代碼中的常量,一部分是作為立即數,在代碼區中,但是像定義的字元串、給某數組賦值的一串數值,這些常量,就存在常量區,我們常用const來定義一個常量,即該變數不能再必變。這部分的變數,編譯器一般將它定義的flash中。

六、各個區域大小的是如何決定的:

code區和const區:是由代碼的大小和代碼中常量的多少來決定的。

bss區和data區:這是由代碼中定義的全局變數和局部變數的多少來決定的。

stack區:這個可以由使用都自行定義大小,但使用都要根據自已代碼的情況,評估出一個合理的值,再定義其大小,如果定義的太小,很容易爆棧,導至代碼異常,但是如果定義的太大,就容易浪費內存。

heap區:RAM剩下的部分,編譯器就會作為堆區使用。

七、嵌入式代碼一般啟動過程

以STM32為例,通過分析其匯編啟支代碼,大致可以分為以下幾個步驟:

如果大家想看編譯扣,代碼文件的組成,可以查看統後生的map文件,裡面有詳細的數據,包括各個函數的分配內存,BSS,Data,Stack,Heap,Text的分配情況。

如果相要了解詳細的代碼啟動過程,可看它的啟動匯編文件。

閱讀全文

與c中委託被編譯後的結構相關的資料

熱點內容
h1z1選什麼伺服器 瀏覽:480
蘋果版三國殺怎麼在安卓上下載 瀏覽:726
安潤國際app在哪裡下載 瀏覽:436
iospdf教程下載 瀏覽:330
加密貨幣換手率300表示什麼 瀏覽:725
手機wps新建文件夾存照片 瀏覽:397
單片機rgbled 瀏覽:961
怎麼通過文件加密後發給微信好友 瀏覽:90
用虛擬機編程 瀏覽:821
公司代理伺服器有什麼要求 瀏覽:244
伺服器和資料庫怎麼聯系 瀏覽:633
hbase配置壓縮 瀏覽:918
java000 瀏覽:479
華為手機文件夾的字體顏色 瀏覽:636
安卓怎麼換相機 瀏覽:935
華為相片文件夾怎麼刪除重復照片 瀏覽:316
plc編程視頻教程大全 瀏覽:940
直播用哪個app播放背景音樂 瀏覽:852
點歌機系統app在哪裡下載 瀏覽:611
javadate類型轉換string 瀏覽:696