色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

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

3天內不再提示

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

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

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

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

執行如下代碼,它包括了對象的普通成員函數調用,類的靜態成員函數調用、通過指針調用普通成員函數:

結果如下:

這是obj對象的內存地址。

首先我們看看對象的普通成員函數調用,obj.foo();,對應的匯編代碼為:

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

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

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

再看看靜態成員函數調用的匯編代碼:

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

再看看通過指針調用普通成員函數pt-》 foo();,產生的匯編代碼如下:

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

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 寄存器
    +關注

    關注

    31

    文章

    5363

    瀏覽量

    120914
  • 打印
    +關注

    關注

    1

    文章

    66

    瀏覽量

    18750
  • 編譯器
    +關注

    關注

    1

    文章

    1642

    瀏覽量

    49226
收藏 人收藏

    評論

    相關推薦

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

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

    Python多重繼承使用方法

    繼承是面向對象編程的一個重要方式,通過繼承,子類可以擴展父類的功能,Python也具有該特性,除此之外,Python還可以使用多重繼承。語法:class subClass(Base1,Base2)該
    發表于 04-19 14:41

    C++ 多繼承基類分享

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

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

    繼承派生類與基類有何關系?多繼承派生類與基類有何關系?
    發表于 09-30 06:26

    什么是繼承?

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

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

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

    短和斷的概念

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

    短和斷概念剖解及應用實例

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

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

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

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

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

    一文詳解函數及其相關知識點

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

    怎樣在Java中實現多繼承

    Java是一種面向對象的只允許單繼承的語言,那么怎樣在Java中實現多繼承呢? 2 方法 1. 多層繼承 如果要直接繼承類,子類
    的頭像 發表于 02-17 14:55 ?1350次閱讀

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

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

    為什么運放會有斷?

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

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

    虛焊 假焊 是在SMT貼片加工 中經常出現的不良現象,今天小編就給大家講講什么是焊、假焊?造成焊、假焊的原因有哪些?該如何預防焊假焊。 一、什么是
    的頭像 發表于 04-13 11:28 ?4646次閱讀
    <b class='flag-5'>造成</b><b class='flag-5'>虛</b>焊、假焊的原因有哪些?如何預防<b class='flag-5'>虛</b>焊假焊
    主站蜘蛛池模板: 西施打开双腿下面好紧| 欧美xxxx印度| 久久人人爽人人片AV人成| 魅男mangay| 天天躁夜夜踩很很踩2022| 中文在线观看永久免费| 国产成人亚洲精品无广告| 久久这里只有是精品23| 天天影视网网色色欲| 18禁黄久久久AAA片| 国厂精品114福利电影| 日日操夜夜摸| GOGOGO高清免费播放| 久久久午夜精品福利内容 | 妓女嫖客叫床粗话对白| 日美欧韩一区二去三区| 97色伦久久视频在观看| 久久www免费人成高清| 香艳69xxxxx有声小说| jiapanese50欧美熟妇| 久久综合丁香激情久久| 亚洲精品国产高清嫩草影院| 丰满五十老女人性视频| 嫩草影院地址一地址二| 中文在线观看| 久久热这里只有 精品| 亚洲日韩精品AV中文字幕| 国产视频成人| 色精品极品国产在线视频| Zoofilivideo人馿交| 暖暖日本在线手机免费完整版| 亚洲午夜精品A片久久软件| 国产免国产免费| 天天影视色欲 影视| 高清日本片免费观看| 日本女人bbb| 成视频高清| 三级叫床震大尺度视频| 成人免费毛片观看| 三叶草未满十八岁| 高清大胆欧美videossexo|