More Related Content
PDF
PDF
中3女子が狂える本当に気持ちのいい constexpr PPTX
OpenVRやOpenXRの基本的なことを調べてみた PDF
PPT
PDF
組み込み関数(intrinsic)によるSIMD入門 PPTX
PPTX
Effective Modern C++ 勉強会 Item 22 What's hot
PDF
PDF
【Unite Tokyo 2019】Understanding C# Struct All Things PPTX
PDF
PDF
40歳過ぎてもエンジニアでいるためにやっていること PDF
Unityではじめるオープンワールド制作 エンジニア編 PDF
CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭する PPTX
CEDEC2019 大規模モバイルゲーム運用におけるマスタデータ管理事例 PDF
PDF
出張ヒストリア ブループリントを書くにあたって大切なこと PDF
PDF
PDF
PDF
【Unite Tokyo 2019】Unityだったら簡単!マルチプレイ用ゲームサーバ開発 ~実践編~ PDF
【Unite 2018 Tokyo】60fpsのその先へ!スマホの物量限界に挑んだSTG「アカとブルー」の開発設計 PDF
PDF
20分くらいでわかった気分になれるC++20コルーチン PDF
カスタムメモリマネージャと高速なメモリアロケータについて PDF
PDF
Viewers also liked
PPTX
shared_ptrとゲームプログラミングでのメモリ管理 PDF
PDF
PDF
PPTX
PDF
PDF
PDF
PDF
PDF
PPT
PPTX
シェルスクリプトワークショップ資料 - 上級者向け「シェル芸」 PPTX
[学内勉強会]C++11とdirectxライブラリ PPTX
OSC・シェルのプロが語る『make を使ったデータ処理。』 【make 教】 - OSC2015 Tokyo/Spring 発表資料 PDF
cocos2d-xの概要とこれまでの進化・これからの展開 ODP
Similar to C++のビルド高速化について
PDF
PPTX
PDF
PDF
Continuation with Boost.Context PDF
PDF
PDF
PDF
PDF
PPTX
PPTX
PDF
PDF
PDF
“Design and Implementation of Generics for the .NET Common Language Runtime”他... PDF
PDF
PDF
PDF
PDF
DOCX
More from AimingStudy
PDF
PDF
PPTX
PDF
デザイナーがMELスクリプトを書いて工数削減した話 PDF
Kick Off Technical Artist & ShaderFx - テクニカルアーティストと ShaderFXのお話 PDF
PPT
PPTX
PPTX
PDF
PPTX
C++のビルド高速化について
- 1.
- 2.
- 3.
• ※環境について
–以下の環境で測定しました(ccacheを除く)
• Core i5 2500S
• 2年前頃の2.5inchHDD
• Windows8 & MinGW4.7.2
• VMWare & Ubuntu12.10 & gcc4.8.0
- 4.
make
• 並列化オプション
–make –j[N]
– ソースを並列にコンパイルする
• ○CPUのコア数が多い程並列度を上げられる
• 注)使用メモリがコンパイル数分必要になる
– templateを駆使したソースだと結構メモリが必要
- 5.
- 6.
- 7.
コンパイル(2/3)(プリコンパイル
ヘッダ)
• プリコンパイル後のヘッダファイルをincludeする
– ○単にincludeより速い
– ○コンパイル時の使用メモリが減るので、並列度を上げや
すい
– ×プリコンパイルヘッダのプリコンパイル時間がプラス
– 注)1つしか使用出来ない
– 注)対象ヘッダはスリムに保つ必要がある
• 余り大きいとプリコンパイルヘッダ自体が重くなる
- 8.
計測結果(使用メモリとコンパイル時
間)
• STLやboostをincludeして計測 // hoge.cpp
– メモリはtime #include “stdafx.h”
時間は/usr/bin/time –f “%M KB”
注)赤丸の箇所が一応の目安? // stdafx.h
#include <vector>
→STL一式とboostを1、2個includeした辺り #include <list>
→あまり詰め込まず、主要ヘッダだけ ...
プリコンパイル対象にするのが良さげ
- 9.
- 10.
#include “stack.h“ #pragma once
// 他ソースでStackを使う時vectorが要らな class Stack {
い public:
#include <vector> Stack();
class Stack::Impl { ~Stack();
public: void push(int n);
void push(int n) { v.push_back(n); } int pop();
int pop() {
int n = v.back(); private:
v.pop_back(); class Impl;
return n; Impl *impl;
} };
private:
std::vector<int> v;
};
Stack::Stack()
: impl(new Stack::Impl()) {}
Stack::~Stack() { delete impl; }
void Stack::push(int n) { impl->push(n); }
int Stack::pop() { return impl->pop(); }
- 11.
- 12.
• フリーのゲームエンジンIrrlichtをリンクしてみた
–Windows8 & MinGW4.7.2
• StaticLib時のリンク時間7.8秒 → DynamicLib時の0.8秒
• g++ -shared –c mydll.cpp –o mydll.dll –Wl,--out-implib,libmydll.lib
– Linux & gcc4.8環境
• StaticLib時のリンク時間2.2秒 → DynamicLib時の0.9秒
• g++ -shared –c mydll.cpp –o libmydll.so
※尐なくともGCCではdeclspec(dllexport | dllimport) _stdcall要らなかった
• Makefileの書き換えだけでStaticLib、DynamicLibを切り替えられた
注)dll地獄に注意
- 13.
- 14.
参考URL
• ccache
– http://ccache.samba.org/
• Irrlicht
– http://irrlicht.sourceforge.net/
- 15.