首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> VC >> 關於VC++

VC++ 物件模型深度解析

     編輯:關於VC++

想要進階提升技術實力的 C++ 程式設計師,必須深入理解語言的語意細節。對於使用 VC++ 的開發者而言,更應掌握 VC++ 對 C++ 標準的具體實作細節。雖然《Inside the C++ Object Model》是經典好書,但篇幅較長且與 VC++ 具體實作關聯較小。本文從篇幅與內容深度來看,是深入理解 C++ 物件模型的絕佳切入點。

譯者舊文重讀,理解更深,遂將其翻譯分享。雖文章不長,但因水平有限且翻譯過程常打盹,拖延近一個月才完成。錯誤之處在所難免,歡迎批評指正。

前言

了解所用程式語言的底層實作機制,對 C++ 程式設計師尤為重要。首先,它能消除對語言的神秘感,讓我們不再對編譯器的行為感到不可思議;更重要的是,它能讓我們在除錯與使用進階語言特性時更有把握。當需要優化程式碼效能時,這些知識也能提供有力幫助。

本文核心探討問題

  • 類別如何在記憶體中佈局?
  • 成員變數如何存取?
  • 成員函數如何呼叫?
  • 所謂的「調整塊」(adjuster thunk)是什麼機制?
  • 以下機制的效能開銷如何:
  • 單一繼承、多重繼承、虛擬繼承
  • 虛擬函數呼叫
  • 強制轉換至基類或虛擬基類
  • 例外處理

內容架構

本文將依序探討:C 相容結構體的記憶體佈局、單一繼承、多重繼承、虛擬繼承;接著說明成員變數與成員函數的存取機制(含虛擬函數);隨後分析建構函數、解構函數、特殊指派運算子的運作方式,以及陣列的動態建構與銷毀;最後簡介例外處理的支援機制。

對每項語言特性,將簡述其設計動機、語意規範(本文非 C++ 入門教材),以及在 Microsoft VC++ 中的具體實作。需特別區分抽象的 C++ 語言語意與特定實作之差異。其他 C++ 廠商可能提供完全不同的實作,本文偶爾會將 VC++ 實作與其他實作比較。

類別記憶體佈局

1. C 結構體

C++ 基於 C,因此「基本上」相容 C。C++ 標準對「結構體」採用與 C 相同的簡單記憶體佈局原則:成員變數按宣告順序排列,依具體實作規定的對齊原則在記憶體位址上對齊。所有 C/C++ 廠商都保證其編譯器對有效 C 結構體採用完全相同的佈局。以下簡單結構體 A 的成員佈局與對齊一目了然:

struct A {
    char c;
    int i;
};
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved