女人自慰AV免费观看内涵网,日韩国产剧情在线观看网址,神马电影网特片网,最新一级电影欧美,在线观看亚洲欧美日韩,黄色视频在线播放免费观看,ABO涨奶期羡澄,第一导航fulione,美女主播操b

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

引入虛繼承后會造成怎樣的影響

電子設(shè)計 ? 作者:電子設(shè)計 ? 2018-10-09 09:56 ? 次閱讀

從這部分開始我們除了利用內(nèi)存的信息打印來進行探索外,更多的會通過跟蹤和觀察編譯器產(chǎn)生的匯編代碼來理解編譯器對這些語言特性的實現(xiàn)方式。匯編方面知識的討論超出了本文的范圍,我只對和我們討論相關(guān)的匯編代碼進行解析。理解本文要討論的知識并不需要有很完整的匯編知識,但必須了解起碼的概念。

下面我們看看引入虛繼承后的影響。為了有所對比我們首先看看普通成員函數(shù)的調(diào)用情況。

執(zhí)行如下代碼,它包括了對象的普通成員函數(shù)調(diào)用,類的靜態(tài)成員函數(shù)調(diào)用、通過指針調(diào)用普通成員函數(shù):

結(jié)果如下:

這是obj對象的內(nèi)存地址。

首先我們看看對象的普通成員函數(shù)調(diào)用,obj.foo();,對應(yīng)的匯編代碼為:

第1行把對象的地址存入ecx寄存器,執(zhí)行完這行指令后,我們要以看到ecx中的值為0x0012F843,就是前面打印出的值。如果函數(shù)需要傳遞參數(shù),我們還會在前面看到一些push指令。在第2行我們可以看到call的是一個直接的地址,這也就是靜態(tài)綁定。即函數(shù)的調(diào)用地址在編譯時已經(jīng)被編譯器決議。

跟蹤進去我們要以看到是一條跳轉(zhuǎn)指令,繼續(xù)執(zhí)行可以看到真正的函數(shù)代碼部分,如下(注:為了討論方便我在第行前面加了一個行號):

我們看看第7行,把ecx寄存器入棧,后面4行初始化了函數(shù)的堆棧中的保存局部變量的部分。第12行彈出ecx值,到這里時ecx的值保持為在函數(shù)調(diào)用前存入的對象內(nèi)存地址,第13行就是保存this指針的值,作為一個局部變量。這樣我們就知道了VC7.1不是象傳遞普通函數(shù)那樣通過壓棧來傳遞this 指針,而是通過ecx寄存器來傳遞。第14、15行利用這個this指針給對象的成員變量進行了賦值。

再看看靜態(tài)成員函數(shù)調(diào)用的匯編代碼:

非常直接,因為它不需要處理this指針,跟蹤到函數(shù)的匯編代碼,可以看到同樣不需要處理this指針。具體的代碼這里就不列出來了。

再看看通過指針調(diào)用普通成員函數(shù)pt-》 foo();,產(chǎn)生的匯編代碼如下:

和通過對象調(diào)用普通成員函數(shù)的代碼差不多。不過存對象地址到ecx寄存器地,是通過解引用pt指針來找到對象地址的。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 寄存器
    +關(guān)注

    關(guān)注

    31

    文章

    5421

    瀏覽量

    123308
  • 打印
    +關(guān)注

    關(guān)注

    1

    文章

    66

    瀏覽量

    18945
  • 編譯器
    +關(guān)注

    關(guān)注

    1

    文章

    1654

    瀏覽量

    49886
收藏 人收藏

    評論

    相關(guān)推薦
    熱點推薦

    蓄電池在充放電時AD采樣到的值低,怎樣解決?

    有沒有人做過蓄電池充放電檢測的,怎樣檢測蓄電池的實際值,充放電時會低,測的不準啊,求助
    發(fā)表于 07-21 09:14

    C++ 多繼承基類分享

    /details/1027495131.多繼承派生類有多個基類或者基類,同一個類不能多次作為某個派生類的直接基類,但可以作為一個派生類的間接基類;class QUEUE: STACK, STACK{...
    發(fā)表于 07-02 06:54

    淺析多繼承派生類中的基類

    繼承派生類與基類有何關(guān)系?多繼承派生類與基類有何關(guān)系?
    發(fā)表于 09-30 06:26

    什么是繼承?

    什么是繼承?繼承是子類利用父類中定義的方法和變量就像它們屬于子類本身一樣. class Car {   int color_number;&n
    發(fā)表于 04-28 14:26 ?753次閱讀

    電路,電路的特點,電路的原理是什么?

    電路,電路的特點,電路的原理是什么? 電路是交換網(wǎng)絡(luò)(ATM、幀中繼、IP或因特網(wǎng))上兩個終端站之間的點對點通信鏈路。電路
    發(fā)表于 03-18 14:52 ?9348次閱讀

    短和斷的概念

    短和斷的概念
    發(fā)表于 12-30 14:37 ?8次下載

    短和斷概念剖解及應(yīng)用實例

    短指在理想情況下,兩個輸入端的電位相等,就好像兩個輸入端短接在一起,但事實上并沒有短接,稱為“短”。短的必要條件是運放引入深度負反饋。
    發(fā)表于 03-16 14:48 ?1.9w次閱讀

    顯卡焊癥狀是怎樣的_顯卡焊自己怎么修

    顯卡焊是指顯卡芯片的BGA焊點與主板接觸不良,一般是由于顯卡高溫導(dǎo)致的。
    發(fā)表于 04-09 09:03 ?16.3w次閱讀
    顯卡<b class='flag-5'>虛</b>焊癥狀是<b class='flag-5'>怎樣</b>的_顯卡<b class='flag-5'>虛</b>焊自己怎么修

    手機該不該ROOT權(quán)限?ROOT之后會怎樣

    ROOT權(quán)限也就是手機的一個大門,即超級管理員的功能。手機廠商會植入APP廣告,增加手機的影響力,又或者軟件給予的津貼,在新的手機上預(yù)安裝很多的APP。這些app程序,用戶的操作權(quán)限是無法刪除,但root手機就有權(quán)限刪除這些APP了。那么手機該不該ROOT權(quán)限?手機ROOT之后會
    的頭像 發(fā)表于 11-24 10:50 ?1.1w次閱讀

    PCBA加工中造成焊的原因及解決方法

    PCBA焊也就是常說的冷焊,表面看起來焊連了,但實際內(nèi)部并沒有通,或者處于可能通也可能不通的中間不穩(wěn)定狀態(tài),影響電路特性,可能會造成PCB板質(zhì)量不合格或者報廢。因此對于PCBA焊現(xiàn)象要重視,下面就為大家介紹PCBA
    的頭像 發(fā)表于 03-06 11:07 ?9001次閱讀

    一文詳解函數(shù)及其相關(guān)知識點

    本期是C++基礎(chǔ)語法分享的第七節(jié),今天給大家來分享一下: (1)析構(gòu)函數(shù); (2)純函數(shù); (3)函數(shù)、純函數(shù); (4)函數(shù)指針、
    的頭像 發(fā)表于 10-13 10:14 ?8185次閱讀

    怎樣在Java中實現(xiàn)多繼承

    Java是一種面向?qū)ο蟮闹辉试S單繼承的語言,那么怎樣在Java中實現(xiàn)多繼承呢? 2 方法 1. 多層繼承 如果要直接繼承類,子類
    的頭像 發(fā)表于 02-17 14:55 ?1480次閱讀

    什么是焊假焊?造成焊假焊的原因有哪些?

    焊是指元件引腳、焊端、PCB焊盤處上錫不充分,焊錫在此處的潤濕角大于90°,而且只有少量的焊錫潤濕引腳、焊端、PCB焊盤,造成接觸不良而時通時斷。
    的頭像 發(fā)表于 02-24 16:29 ?2.2w次閱讀

    為什么運放會有斷?

    為什么運放會有斷?? 運放是集成電路的一種,主要用于信號放大和處理。在實際使用過程中,可能會發(fā)現(xiàn)運放出現(xiàn)斷這種現(xiàn)象,這是由于多種因素造成
    的頭像 發(fā)表于 09-20 16:29 ?1461次閱讀

    造成焊、假焊的原因有哪些?如何預(yù)防焊假焊

    虛焊 假焊 是在SMT貼片加工 中經(jīng)常出現(xiàn)的不良現(xiàn)象,今天小編就給大家講講什么是焊、假焊?造成焊、假焊的原因有哪些?該如何預(yù)防焊假焊。 一、什么是
    的頭像 發(fā)表于 04-13 11:28 ?5488次閱讀
    <b class='flag-5'>造成</b><b class='flag-5'>虛</b>焊、假焊的原因有哪些?如何預(yù)防<b class='flag-5'>虛</b>焊假焊