On Github EzoeRyou / boost-benkyokai-sapporo
江添亮 仕事: C++エヴァンジェリスト(ドワンゴ)http://cpplover.blogspot.jp/ boostcpp@gmail.com GitHub: EzoeRyou
Cube - Page - Concave - Zoom - Linear - Fade - None - Default
よくある実装例
プログラムファイルに格納
例:ELFにおける.dataや.bss
thread_local指定された変数
よくある実装例
プログラムファイルに格納
例:ELFにおける.tdataや.tbss
いわゆるローカル変数
よくある実装例
スタックから確保
実行時に動的なサイズのストレージを確保できる
よくある実装例
ヒープと呼ばれる管理されたメモリ空間から確保
よくある実装
確保済みの連続したメモリとスタックポインターの増減で実装
確保、解放がとても速い
実装は様々
大きな連続したメモリ領域を管理して確保
一般的に、スタックより遅い
速いスタックから動的にストレージを確保したい
小さなサイズのメモリ領域を
極めて短時間確保したい
用途:ゲーム、音声動画圧縮のエンコーダー/デコーダー、数値計算
template < typename T > void f() { void * p = alloca( sizeof(T) ) ; T * t = new(p) T() ; T->~T() ; }
遅い
極小サイズならば
それぞれのサイズごとに分けたメモリ領域から
割り当てるテクニックもある
でも遅い
C++14に追加される予定だった
void f( std::size_t size ) { char a[ size ] ; }
C++14に追加される予定だった
void f( std::size_t size ) { std::dynarray<char> a( size ) ; }
コメント
C++14はマイナー新機能を含むバグ修正リリースが目的であったはずだ
提案する変更
規格の品質に悪影響を及ぼす新機能をすべて取り除け
optionalさんも巻き添えになった
データメンバーとしては使えず、直接使わなければならない
実行時サイズ配列を使って
dynarrayを実装することは出来ない
データメンバーなど、スタック確保できないところで使うと
自動的に動的ストレージから確保される
スタックから確保したければ、直接使わなければならない
Abstractionができない
つまり、クラスでラップして使えない
実行時サイズ配列をデータメンバーとして使える提案
struct Foo { Foo( std::size_t size ) : v[size]{} { } char v[] ; } ;
実行時サイズ配列をデータメンバーとして持つクラスは
自動ストレージ上にしか構築できない
C++では、型はどのストレージ上にも構築できる
N3875提案が採用されれば、もはや成り立たない
dynarrayならば、どのストレージ上にも構築できる
実装にコンパイラーマジックが必要
絶対にスタックに確保されて欲しい需要には答えられない
C++では、オブジェクトは明示的に破棄できる
C++では、オブジェクトは明示的に構築できる
お分かりか?
// ネストした確保 void f( std::dynarray<int> & r ) { r.~dynarray() ; // 破棄 // 別のサイズで再確保 new(r) std::dynarray<int>(2) ; } int main() { std::dynarray<int> a(1) ; f( a ) ; }
既存のC++では、これは当然できる
しかし、スタック確保の特性を考えると、できない
例外は作りたくない
スタック確保を標準化するにあたって必要
まだ何も提案されていない
ドワンゴに入社した直後、@ignis_fatuusからtweetが来た
@EzoeRyou ご就職おめでとうございます。札幌でBoost勉強会を5月頃にやろうかという話があるのでぜひC++の啓蒙のためにお越しください。
— いぐにすさん @πλασμα (@ignis_fatuus) February 13, 2014札幌か
まあ
その頃には給料も入っているだろうし
行けるだろう
しかし
C++の啓蒙なら
仕事のうちではないか
江添「Boost勉強会行きたいんですけど旅費だして」 上司「じゃあ、出張ってことで」 上司「航空券とホテル、手配しといたよ」
Boost.勉強会 #15 札幌 に発表者として参加することで、ドワンゴのC++に対する取り 組みをアピールする狙いがある。
また、懇親会にも参加することで、C++エンジニアの中途採用につなげる狙いもある。
宣伝になれば全国どこにでも行ける
このスライド資料はドワンゴ勤務中に書かれた。
ドワンゴは本物のC++プログラマーを募集しています。