Home
Blog
Company
TechMemo
Contact
メニュー
スタッフブログ
会社案内
技術系備忘録
お問い合わせ
旧ホームページ
ブログ更新履歴
2024/11/03
rlib-MML アプリ FM音源による再生をサポートしました
2024/08/31
rlib-MML アプリ 楽器(SoundFont)を複数用意しました
2024/06/16
rlib-MML WebApp に SoundFont(サウンドフォント)レンダリング機能を実装
2024/03/11
rlib-MML 機能追加しました
2023/12/16
rlib-MML アプリ ver1.0.6 公開しました
コンテンツ更新履歴
最新の30件
2024-04-13
技術系備忘録/Docker/Emscripten
2022-10-24
技術系備忘録/Windows/接続されているモニタ以上の解像度でデスクトップ表示
2021-10-14
技術系備忘録/C++/小技/無名関数の再帰をローテクで
2021-08-10
技術系備忘録/C++/小技
2021-08-08
技術系備忘録/C++/小技/型で条件分岐
2021-06-10
技術系備忘録/Docker/サーバー死活監視スクリプト
2021-03-29
技術系備忘録/C++/Boost/boost.formatを使った文字列フォーマット。printf系関数を置き換え
2020-10-21
技術系備忘録/VMware/Ubuntu8.10にVMwareServer1.0をインストール
2020-10-14
技術系備忘録/VMware
技術系備忘録/VMware/CentOS7にVMwarePlayer12をインストール
2020-06-03
技術系備忘録/TypeScript/二分探索(binary search)
2020-06-01
技術系備忘録/Docker/SSLアクセラレータ&リバースプロキシ
2019-11-08
技術系備忘録/C++/OpenSSL/ビルド方法
2019-11-04
技術系備忘録/C++/VisualStudio/MSBuild.exeのパスを解決して実行
2019-10-02
MenuBar
2019-09-05
技術系備忘録/Docker
2019-09-04
技術系備忘録/Docker/LAMP環境構築
2019-07-16
会社案内/品質管理方針
2019-04-18
技術系備忘録/AWS/SoftEtherを使ってVPN接続
2019-02-18
技術系備忘録/C++/小技/std.set map系の比較関数の新機能
2018-05-25
技術系備忘録/データベース
技術系備忘録/データベース/SQLite
技術系備忘録/データベース/SQLite/WHERE IN で複数指定するクエリ
2018-05-20
会社案内/求人情報
2018-01-11
技術系備忘録/AWS/EC2 AmazonLinuxにSWAPを設定
技術系備忘録/AWS
2017-11-21
技術系備忘録/C++/Boost/インストール手順
2017-10-25
技術系備忘録/C++/Boost
技術系備忘録/C++/VisualStudio
技術系備忘録/C++/Boost/boost.asioコルーチン内で表コンテキストの処理を行う
リンク
rlib-MML WebApp
MML (Music Macro Language) をコンパイルし、再生やファイル出力(MP4、標準MIDIファイル)をブラウザ上で行えます。
Magome
クラウドベースのMIDIシーケンサ
音楽制作に興味のある方を対象に、スタンドアロンでも使え、ネットならではの面白さも兼ね備えた音楽制作アプリの提供を目指しています。
twitter
Tweets by thinkridge
(有)シンクリッジは 技術者 を募集しております。
|
一覧
検索
最新
ヘルプ
ページへ戻る
履歴
印刷
技術系備忘録/C++/最適化小手先テクニック/メンバ変数の参照は控えめにすべし
のソース
xpwiki
:
技術系備忘録
/
C++
/
最適化小手先テクニック
/
メンバ変数の参照は控えめにすべし
のソース
差分
を表示
技術系備忘録/C++/最適化小手先テクニック/メンバ変数の参照は控えめにすべし
へ行く。
関数の中で、同じメンバ変数を何度も参照するような場合、ローカルにコピーしたほうが処理は早い場合が多いです。 例えば List1 のようなコードがあったとします。 -List1 #prettify{{ class CTest { private: CClassA *m_pClassA; public: void Proc(); } void CTest::Proc() { m_pClassA->SetNumber(1); m_pClassA->SetCount(2); m_pClassA->Proc(); } }} CTest::Proc 関数で、m_pClassAを3回参照しています。 もし、m_pClassA の値が関数内で変わることがないのであれば、m_pClassA をローカル変数にコピーして、それを参照するようにしたのが List2 です。 -List2 #prettify{{ void CTest::Proc() { CClassA* const pClassA = m_pClassA; // ローカル変数にコピー pClassA->SetNumber(1); pClassA->SetCount(2); pClassA->Proc(); } }} なぜ、わざわざローカル変数にコピーする必要があるかというと、List1 は実は以下のコード list3 と同等です。 -List3 #prettify{{ void CTest::Proc() { CClassA *pClassA; pClassA = this->m_pClassA pClassA->SetNumber(1); pClassA = this->m_pClassA pClassA->SetCount(2); pClassA = this->m_pClassA pClassA->Proc(); } }} コンパイラは、変数m_pClassAが保持するCClassAのポインタを、毎回読み直すコードを吐きます。 そのため、プログラマがそれをさせないコードにすればムダは省けます。 賢いコンパイラならこの程度の最適化は勝手にしてくれると考えるかもしれませんが、この場合はされません。 コンパイラは、 m_pClassA->SetNumber(1); という関数の中で、CTest::m_pClassA が変更される可能性がある為 m_pClassA をキャッシュしておくことはしません。 その為、次に m_pClassA を参照する場合も律儀に読み直す必要があるのです。
技術系備忘録/C++/最適化小手先テクニック/メンバ変数の参照は控えめにすべし のバックアップソース(No. All)
現: 2016-03-31 (木) 15:22:08
takatsuka
ぺージ情報
ぺージ名 :
技術系備忘録/C++/最適化小手先テクニック/メンバ変数の参照は控えめにすべし
ページ別名 :
未設定
ページ作成 :
takatsuka
閲覧可
グループ :
すべての訪問者
ユーザー :
すべての訪問者
編集可
グループ :
なし
ユーザー :
なし
Counter: 2711, today: 1, yesterday: 0