ホームページ > バックエンド開発 > PHPチュートリアル > C++のパフォーマンス分析(4): 継承がパフォーマンスに与える影響、継承の分析_PHPチュートリアル

C++のパフォーマンス分析(4): 継承がパフォーマンスに与える影響、継承の分析_PHPチュートリアル

WBOY
リリース: 2016-07-13 10:19:32
オリジナル
1058 人が閲覧しました

C++ パフォーマンス分析 (4): パフォーマンスに対する継承の影響、継承の分析

(今日このエディターに問題があり、フォーマットがめちゃくちゃになってしまいました、ごめんなさい!)

継承は OOP の重要な機能です。業界の多くの同僚は継承を好みませんが、継承を正しく使用することは、アプリケーション レベルおよびアーキテクチャ レベルでの重要な設計上の決定です。 特に std コンテナーでの継承の広範な使用は、プログラムのパフォーマンスにどのような影響を及ぼしますか?

私の個人的な経験から言えば、コンストラクターは深い継承チェーンを持つクラスの作成に大きな影響を与えます。 アプリケーションで許可されている場合は、コンストラクターなしで基本クラスを使用するのが最善です。以下に例を示します:

struct __declspec(novtable) ITest1

{ virtual void AddRef() = 0;

仮想 void Release() = 0;

仮想 void DoIt(int x) = 0;

クラス CTest: パブリック ITest1

{

内部参照

パブリック: インライン CTest() { ref = 0 }

インライン void AddRef() { ++ref }

;

inline void Release() {--ref }

インライン void DoIt(int x) {ref *= x }

inline void AddRef2() { ++ref }

;

inline void Release2() {--ref }

inline void DoIt2(int x) {ref *= x }

static void TestPerf(int ループ) };

これはダミープログラムですが、COMでは非常に一般的です。 CTest を大量に作成して使用する場合、経験豊富なプログラマーであれば、ITest1 にはコンストラクターがまったく必要ないことがわかるはずです。 C++ マニュアルによると、ITest1 は仮想関数を持っているため、コンパイル時にコンストラクターを生成する必要があり、その唯一の目的は ITest1 の vtbl (仮想関数テーブル) を設定することであるため、「非単純コンストラクター クラス」です。

ただし、インターフェイスの機能のみが継承されるため、その vtbl は継承されたクラスによって設定する必要があります。この場合、コンパイラはコンストラクターを生成する必要はありません。 Microsoft は ATL の設計時にこれを認識し、C++ の公式 SPEC の欠陥を回避するための独自のソリューションを立ち上げました。VC++ は

novtable

class 修飾子 を提供し、コンパイラーに次のように指示します。ただし、コンストラクターは必要ありません。 、私 VS 2010 のテスト結果は残念でした: ITest1 のコンストラクターは引き続き生成されますが、

vtbl

に値を割り当てないため、基本クラス構築のパフォーマンスは向上しません。 この「役に立たないコンストラクター」がパフォーマンスに与える影響を見てみましょう。 比較のために、仮想機能を必要としない別の ITestPOD (POD は「データのみ」を意味します) を取り上げてみましょう:

構造体 ITest1POD

{ inline void AddRef() { }

インライン void Release() { }

inline void DoIt(int x) { } };

ITestPOD は、もちろん、インターフェイスとして完全に使用することはできません (インターフェイスは仮想関数を使用する必要があります)。これはテストのみに使用されます。次に、上記の CTest とまったく同じ機能を持つ継承クラスを設計します。

クラス CTestPOD: パブリック ITest1POD

{

内部参照

パブリック: インライン CTestPOD() { ref = 0 }

インライン void AddRef() { ++ref }

;

inline void Release() {--ref }

;

インライン void DoIt(int x) {ref *= x }

};

私たちの目的は、この CTestPOD を使用して CTest との同一比較を行うことです。 void CTest::TestPerf(int ループ)

{

Clock_t begin = ;

for(int i = 0; i

{

CTestPOD testPOD // line1 ;

testPOD.AddRef(); testPOD.DoIt(0);

testPOD.Release(); }

Clock_t end =

; printf("POD 時間: %f n",double(end - begin) / CLOCKS_PER_SEC);

begin = 時計(); for(int i = 0; i

{

Ctest テスト; // line2

test.AddRef2();

test.DoIt2(0); test.Release2();

}

end = クロック();

printf("インターフェイス時間: %f n",double(end - begin) / CLOCKS_PER_SEC);

}

上記の loop1

loop2 の唯一の違いは、line1 と line2 です。仮想関数の使用を避けるために、CTest 用に 3 つの同一の非仮想関数を特別に用意しました。パフォーマンス テストの主な原則: 同一のものを比較する。 ループを 100,000 に設定したところ、テストの結果、ループ 2 はループ 1 よりも約 20% 遅いことがわかりました。生成されたコードから判断すると、唯一の違いは、CTest のコンストラクターが、コンパイルによって自動的に生成される ITest1 のコンストラクターを呼び出すことです。このコンストラクターは、多くの CPU サイクルを消費するだけで何も行いません。優れたコンパイラは、このコンストラクタを切り出すことができるはずです。これを自分で探すのは私たち次第です。

概要

継承を適用​​する場合、基本クラス内の不要なコンストラクターを削除すると、構築された多数のオブジェクトのパフォーマンスに大きな影響を与えます。残念ながら、Microsoft の __declspec(novtable) クラス修飾子は、この問題の解決に役立ちません。大容量ストレージ オブジェクト用のアプリケーションを設計するときは、上記の CTest クラスのような明らかなパフォーマンスの抜け穴を避けるために、基本クラスとして POD を使用するように努める必要があります。

2014-9-3 Seattle

ご紹介: 材料間の結合が材料特性に及ぼす影響

すべての固体では、原子は結合によって結合されています。結合は固体に強度とそれに対応する電気的および熱的特性を与えます。たとえば、結合が強いと、融点が高くなり、弾性率が高くなり、原子間距離が短くなり、熱膨張係数が低くなります。
1. 化学結合
1. イオン結合
イオン結合は、正電荷と負電荷の相互引力によって引き起こされます。たとえば、ナトリウム原子はその価電子軌道に電子を持っており、その外側の電子を容易に放出して、正に荷電したイオンになることができます。同様に、塩素原子は、最大 8 電子までの価電子軌道に電子を容易に受け入れ、負に荷電したイオンになります。マイナスに帯電した物質とプラスに帯電した物質の間には常に静電引力が存在するため、異なる電荷を持つ隣接するイオン間に結合が形成されます。イオン結合の特徴は、正イオンの隣には負イオンがあり、負イオンの隣には正イオン (NaCl 結晶など) があることです (図 2-1 を参照)。
2 共有結合
共有結合は強力な魅力的な結合です。 2 つの同一の原子または類似の性質を持つ原子が互いに接近している場合、原子は共有電子対によって生じる力によって結合され、共有結合を形成します。共有結合は原子間に強い引力を生み出します。これは、自然界で最も硬い材料であり、完全に炭素原子で構成されているダイヤモンドで明らかです。各炭素原子には 4 つの価電子があり、隣接する原子と共有されて、完全に価電子対で構成される 3 次元格子を形成します。この三次元格子がダイヤモンドに高い硬度と融点を与えます。
3. 金属結合
金属は金属結合で構成されており、非金属とはまったく異なる特性を持っています。金属原子には外部電子がほとんどなく、簡単に失われます。金属原子が互いに近づくと、外側の原子が原子から離れて自由電子となり、金属全体で共有されます。この自由電子は金属内部を移動して電子ガスを形成します。図 2-2 に示すように、自由電子と金属カチオンの間のこの結合は金属結合と呼ばれます。 分子結合
分子結合はファンデルワールス結合とも呼ばれ、最も弱い結合です。原子内の電子の不均一な分布に依存して、ファンデルワールス力と呼ばれる弱い静電引力が発生します。この分子力によって結合される結合は分子結合と呼ばれます。
5. 水素結合
別のタイプのファンデルワールス力は、実際には極性分子の特殊なケースです。 C-H、O-H、または NH 結合の端にある露出したプロトンは電子によって遮蔽されていないため、この正電荷は隣接する分子の価電子を引き付け、水素結合と呼ばれるクーロン型結合を形成します。ファンデルワールス結合の中で最も強い結合。水素結合の最も典型的な例は水です。水分子の水素陽子は、隣接する分子の酸素の孤立電子対を引きつけます。この水素結合により、水はすべての低分子量物質の中で最も高い沸点を持ちます。
2. 接着が材料特性に及ぼす影響
1. 金属材料
金属材料の結合結合は主に金属結合物です。自由電子の存在により、金属が外部電場にさらされると、金属内部の自由電子が電場の方向に沿って移動し、電子流を形成するため、金属は良好な導電性を持ちます。金属も、熱エネルギーを伝達するために正イオンの振動に依存します。自由電子の移動によっても熱エネルギーが伝達されるため、金属の温度が上昇すると、金属の熱伝導率が高まり、正イオンの熱振動が増大します。自由電子の方向性の移動に対する抵抗が増加し、そのため金属は正の抵抗を持ちます。金属の 2 つの部分が相対的に移動しても、金属の陽イオンは金属結合を維持するため、良好な温度係数を持ちます。変形能力; 自由電子は光のエネルギーを吸収することができるため、金属は不透明になり、吸収されたエネルギーは元の状態に戻り、金属に光沢を与えます。
金属には共有結合 (灰色の錫など) やイオン結合 (金属間化合物 Mg3Sb2 など) もあります。
2. セラミック材料
簡単に言うと、セラミック材料は金属元素と非金属元素を含む化合物であり、その結合結合は主にイオン結合と共有結合であり、そのほとんどはイオン結合です。イオン結合はセラミック材料にかなりの安定性を与えるため、セラミック材料は通常非常に高い融点と硬度を持ちますが、同時に非常に脆いものでもあります。
3. ポリマー材料
ポリマー材料の結合結合は、共有結合、水素結合、分子結合です。このうち、分子を構成する結合結合は共有結合と水素結合であり、分子間の結合結合はファンデルワールス結合です。ファンデルワールス結合は弱いですが、高分子材料の分子は大きいため、分子間力もそれに応じて大きくなり、高分子材料は良好な機械的特性を持ちます。
3. 結晶と非晶質
結合結合を学んだ次の課題は、原子や分子の配置から物質を考えることです...全文の続きはこちら >>
C++のパフォーマンス分析(4): 継承がパフォーマンスに与える影響、継承の分析_PHPチュートリアル

カーテンウォールの3つの物理的特性をテストできます



新しいガラスカーテンウォール仕様と技術検査基準の議論と導入

山東省建築科学アカデミー(山東省建設機械品質監督検査センター)

李成偉

山東省建設機械品質監督検査センターは建築用カーテンウォール試験部門は、国家工業製品生産許可の指定試験部門でもあり、近年、建築用カーテンウォールプロジェクトの長期試験と追跡調査を実施しています。私たちの州の建築カーテンウォールプロジェクトの製造品質と施工レベルを直接把握しました。国内の先進企業の技術レベルを比較すると、我が省のカーテンウォール企業の間には、生産技術レベルだけでなく、カーテンウォール構築の技術設計や施工方法にも一定の差があり、これが主に反映されている。仕様の理解と実装には大きなギャップがあります。以下では、カーテンウォールを構築するための仕様の設計、計算、理解についての私たちの見解について話しましょう。

1.「ガラスカーテンウォール技術仕様書」JGJ102-2003の改訂内容の概要

「ガラスカーテンウォール技術仕様書」JGJ102-2003は、2004年1月1日から施行されています。独自の業界標準「同時に「ガラスカーテンウォール技術仕様書」JGJ102 -96を廃止。 JGJ102-2003の改訂は比較的大規模であり、義務規定の追加だけでなく、全面ガラスカーテンウォールや点支持カーテンウォールの内容も追加され、その他の内容も大幅に改訂されています。

(1) 必須条件の追加:

1. シリコーン構造シーラントは隠しフレームおよび半隠蔽フレームのガラス カーテンウォールに使用され、ガラスとアルミニウム プロファイル間の接着には中サイズのシリコーン構造シーラントを使用する必要があります。

シリコーン構造シーラントを使用する前に、それに接触する材料の適合性と剥離接着力のテストを国家的に認められた試験機関によって実施し、標準条件下でのショア硬度と引張接着性能を再テストする必要があります。検査に合格しなかった製品は使用しないでください。輸入されたシリコーン構造用シーラントには商品検査報告書が必要です。シリコーン構造用シーラントおよびシリコーン建築用シーラントは、使用期限内に使用する必要があります。

シリコーン構造シーラントは、さまざまな応力条件に基づいて耐荷重限界状態の計算を受ける必要があります。

全ガラスのカーテンウォールを除き、シリコーン構造シーラントを現場で注入しないでください。

2. 構造部材の支持力とたわみは規制に従ってチェックされ、仕様要件を満たしている必要があります。

柱の主応力負担部分のアルミニウムプロファイルセクションの開口部の厚さは3.0mm以上、プロファイル穴が開いている場合の閉じた部分の厚さは2.5mm以上である必要があります。壁とねじがねじ応力によって直接接続されている場合、局所的な厚さはまだねじの公称直径より小さくなければなりません。鋼製プロファイルセクションの主要な応力負担部分の厚さは 3.0 mm 未満であってはなりません。 。

クロスビームの主応力負担部分のアルミニウム合金プロファイルの厚さは、クロスビームのスパンが1.2 mを超える場合、主応力負担部分の厚さは2.0mm以上である必要があります。断面の寸法は 2.5mm 以上であってはなりません。ねじによる力の接続がプロファイル穴の壁とねじの間に直接使用される場合、局所的な断面の厚さはねじの呼び径より小さくてはなりません。鋼製プロファイルセクションの主要な応力負担部分の厚さは 2.5 mm 以上である必要があります。

3. 青少年や幼児が活動する、人が密集する公共の場所のガラスカーテンウォール、および使用中に衝撃を受けやすい部分には、安全ガラスを設置する必要があります。使用中に当たる。

(2) オールガラスカーテンウォールの主な内容:

パネルガラスの厚さは合わせガラスの場合、1枚の厚さが10mm以上である必要があります。 8mm。

ガラスリブの断面の厚さは12mm以上、断面の高さは100mm以上である必要があります。また、この規定は必須です。

風荷重の標準値の下では、ガラスリブのたわみ限界は計算されたスパンの1/200でなければなりません。

フローティングヘッドコネクタを使用するカーテンウォールガラスの厚さは6mm以上、皿頭コネクタを使用するカーテンウォールガラスの厚さは8mm以上である必要があります。ガラス間の隙間の幅は 10 mm 以上とし、シリコーン建築用シーラントでコーキングする必要があります。この部分は必須です。

点支持ガラスカーテンウォールの支持構造は別途計算する必要があります。

単形鋼または鋼管が支持構造として使用されるか、トラスまたは中空トラスが支持構造として使用されるかにかかわらず、風荷重の標準値の作用下では、たわみ制限は風荷重の1/250でなければなりません。そのスパン。

テンション ロッドとケーブル システムは、風荷重や地震作用に耐えられるよう、正方向と負方向の両方で安定した構造システムを形成する必要があります。コネクタ、プレッシャー ロッド、またはタイ ロッドの直径はステンレス鋼であってはなりません。ケーブルの撚り線は 8 mm 以上である必要があります。タイロッドやケーブルも溶接しないでください。風荷重の標準値が作用した場合、そのたわみ限界をそのスパンとみなすべきです... 全文の続き >>

www.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/873922.html技術記事 C++ パフォーマンス分析 (4): パフォーマンスに対する継承の影響、継承の分析 (今日このエディターに問題があり、すべてのフォーマットが台無しになってしまいました、ごめんなさい!) 継承は OOP の一部です...

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート