SlideShare a Scribd company logo
1 of 100
Download to read offline
1
2013/06/22 Cryolite
Boost.勉強会 #12 ⼤阪
Allocators@C++11
2
2013/06/22 Cryolite
Boost.勉強会 #12 ⼤阪
Allocators@C++03
Q. アロケータとは何か?
A. メモリ割り当てを
カスタマイズする仕掛け
3
Q. アロケータとは何か?
A. メモリ割り当てを
カスタマイズする仕掛け
4
アロケータのメンバって
(de)?allocate だけですか?
5
• pointer – 割り当てたメモリを指すポ
インタ型
• allocate – メモリを割り当てる
• deallocate – メモリを開放する
• construct – オブジェクトを構築する
• destroy – オブジェクトを破壊する
• .....
アロケータのメンバって
(de)?allocate だけですか?
6
• pointer – 割り当てたメモリを指すポ
インタ型
• allocate – メモリを割り当てる
• deallocate – メモリを開放する
• construct – オブジェクトを構築する
• destroy – オブジェクトを破壊する
• .....
メモリの割り当て・解放以外もできる!
今⽇⾔いに来たこと
7
(de)?allocate をカスタ
マイズしたら終わり,とい
うそのふざけた幻想※をぶ
ち壊しにきました.
※インターネッツを利⽤した当社独⾃の調査による
C++03 のアロケータは
あんまり使えない
8
C++03 のアロケータは
あんまり使えない
あんまり使えない理由:
• オブジェクト毎の状態を持てない
9
C++03 のアロケータは
あんまり使えない
あんまり使えない理由:
• オブジェクト毎の状態を持てない
≒⾮静的データメンバを持てない
10
C++03 のアロケータは
あんまり使えない
あんまり使えない理由:
• オブジェクト毎の状態を持てない
≒⾮静的データメンバを持てない
• オブジェクト毎の状態を持てない
≒⾮静的データメンバを持てない
11
C++03 のアロケータは
あんまり使えない
あんまり使えない理由:
• オブジェクト毎の状態を持てない
≒⾮静的データメンバを持てない
• オブジェクト毎の状態を持てない
≒⾮静的データメンバを持てない
• オブジェクト毎の状態を持てない
≒⾮静的データメンバを持てない
12
なぜオブジェクト毎の状態を持てな
いような制限が C++03 のアロケー
タに対してあるのか?
重要な制約
あるアロケータの値で allocate
されたメモリは,同じアロケー
タの値で deallocate しないとい
けない.
13
アロケータと
コンテナの swap の関係
14
pointer p_;
allocator_type a_;
.....
pointer p_;
allocator_type a_;
.....
vector<Hoge> vector<Hoge>
各々の a_ は各々の p_ が
指している領域を解放できる
15
pointer p_;
allocator_type a_;
.....
pointer p_;
allocator_type a_;
.....
vector<Hoge> vector<Hoge>
swap
アロケータと
コンテナの swap の関係
16
pointer p_;
allocator_type a_;
.....
pointer p_;
allocator_type a_;
.....
vector<Hoge> vector<Hoge>
各々の a_ は各々の p_ が
指している領域について知らない
swap
アロケータと
コンテナの swap の関係
17
pointer p_;
allocator_type a_;
.....
pointer p_;
allocator_type a_;
.....
vector<Hoge> vector<Hoge>
各々の a_ は各々の p_ が
指している領域について知らない
swap
アロケータと
コンテナの swap の関係
18
pointer p_;
allocator_type a_;
.....
pointer p_;
allocator_type a_;
.....
vector<Hoge> vector<Hoge>
じゃあアロケータも
swap すれば良いじゃん?
アロケータと
コンテナの swap の関係
swap
19
template<typename T, size_t N>
class StackAllocator {
.....
char storage_[N];
};
ところが swap できない
アロケータの種類がある
ここからメモリを割り当てる
この型のアロケータ同⼠は
swap できない
Q. 状態を持ったアロケータと
swap の問題どうすんの?
A. (in C++03) 実装依存です
≒
規格がほとんど何も⾔ってないの
で,アロケータはオブジェクト毎
の状態を持てないと仮定するしか
ない.
20
Allocators@C++03 について
街の⼈の声を聞いてきました
21
22
Allocators@C++03 について
街の⼈の声を聞いてきました
23
使いどころが限定されるが
使えないわけじゃない
Allocators@C++03 について
街の⼈の声を聞いてきました
24
使いどころが限定されるが
使えないわけじゃない
良く分かってそうな感じ
Allocators@C++03 について
街の⼈の声を聞いてきました
25
Allocators@C++03 について
街の⼈の声を聞いてきました
26
Allocators@C++03 について
街の⼈の声を聞いてきました
27
Allocators@C++03 について
街の⼈の声を聞いてきました
オブジェクト毎に
情報持てなくても
そんなに深刻じゃないよ
28
深刻だろ,常識的に考えて…
Allocators@C++03 について
街の⼈の声を聞いてきました
オブジェクト毎に
情報持てなくても
そんなに深刻じゃないよ
29
Allocators@C++03 について
専⾨家の話を聞いてきました
30
Allocators@C++03 について
専⾨家の話を聞いてきました
Pablo Halpern
(アロケータ補完計画メンバ)
31
Allocators@C++03 について
専⾨家の話を聞いてきました
Pablo Halpern
(アロケータ補完計画メンバ)
標準化委員の誰かが
「単に間に合わなかっただけ」
ってゆってた
Allocators@C++03 まとめ
32
Allocators@C++03 まとめ
33
規格の⽂⾔を書くのが間に合いませんでした
34
2013/06/22 Cryolite
Boost.勉強会 #12 大阪
Allocators@C++11
規格の⽂⾔ができました
35
C++11 のアロケータでは
何が起きたか?
36
アロケータに対する
異次元(?)の制限緩和
37
アロケートノミクスの
カスタマイズ戦略3本の⽮
38
状態を持つアロケータ
Stateful allocator
スコープドアロケータモデル
Scoped allocator model
アロケータへの配慮
Allocator-awareness
制限緩和+3本の矢
=アロケータ株価の上昇
39
右肩上がり!
本発表終了時イマココ!
制限緩和+3本の矢
=アロケータ株価の上昇
40
本発表終了時イマココ!
Allocator-awareness
アロケータへの配慮
41
Allocator-awareness
アロケータへの配慮
ユーザから指定された
アロケータをちゃんと
使います.
42
アロケータへの配慮
std::vector の例 (1/2)
43
pointer p_;
.....
MyClass MyClass MyClass ・・・・・(未構築)
std::vector<MyClass>
メモリは allocate で獲得,
deallocate で解放
各 value_type オブジェクトは
construct で構築, destroy で破壊
ポインタ型はアロケータで
指定されたものを使う
44
pointer p_;
allocator_type a_;
.....
pointer p_;
allocator_type a_;
.....
vector<Hoge> vector<Hoge>
コンテナの swap のときにアロケータを
swap する・しない,を制御可
アロケータへの配慮
std::vector の例 (2/2)
(propagate_on_container_*)
45
pointer p_;
allocator_type a_;
.....
pointer p_;
allocator_type a_;
.....
vector<Hoge> vector<Hoge>
アロケータへの配慮
std::vector の例 (2/2)
コンテナの swap のときにアロケータを
swap する・しない,を制御可
(propagate_on_container_*)
アロケータへの配慮
std::list の例
46
pointer head_;
.....
MyClass v_;
pointer next_;
.....
std::list<MyClass>
_ListNode
MyClass v_;
pointer next_;
.....
_ListNode
・・・・・
状態を持つアロケータ
Stateful Allocator
47
状態を持つアロケータ
Stateful Allocator
アロケータがオブジェクト毎
の状態を持てます!
48
状態を持つアロケータ
Stateful Allocator
アロケータがオブジェクト毎
の状態を持てます!
アロケータがオブジェクト毎
の状態を持てます!
49
状態を持つアロケータ
Stateful Allocator
アロケータがオブジェクト毎
の状態を持てます!
アロケータがオブジェクト毎
の状態を持てます!
アロケータがオブジェクト毎
の状態を持てます! 50
C++11 のアロケータで
何ができるか?
51
allocate/deallocate で⾃作
汎⽤メモリアロケータ……?
52
allocate/deallocate で⾃作
汎⽤メモリアロケータ……?
malloc@glibc「ほう? 汎⽤メモリアロケータを
⾃作……ですか.」
jemalloc「我々を超えてみせる,と?」
tcmalloc「これは楽しみですなぁククク…….」
53
allocate/deallocate で⾃作
汎⽤メモリアロケータ……?
malloc@glibc「ほう? 汎⽤メモリアロケータを
⾃作……ですか.」
jemalloc「我々を超えてみせる,と?」
tcmalloc「これは楽しみですなぁククク…….」
54
死にたくないのでスキップします
55
超単純なアロケータ実装以外では
ほとんど意味なかった←結論
allocate/deallocate で⾃作
汎⽤メモリアロケータの前に
ここから初級の話その1
56
(de)?allocate をカスタマイズ
してメモリっぽいものを扱う
57
(de)?allocate をカスタマイズ
してメモリっぽいものを扱う
58
仮想ページ
仮想アドレス空間
mmap
new
shm_open
& mmap
(de)?allocate をカスタマイズ
してメモリっぽいものを扱う
59
仮想ページ
仮想アドレス空間
mmap
new
shm_open
& mmap
もしかして:Boost.Interprocessのアロケータ
(de)?allocate をカスタマイズ
してメモリっぽいものを扱う
60
仮想ページ
仮想アドレス空間
mmap
new
shm_open
& mmap
もしかして:Boost.Interprocessのアロケータ
Boost.Interprocess のアロケータは stateful
ですが, 標準のコンテナに乗せられます.
ここから初級の話その2
61
62
•メモリ使⽤総量,オブジェ
クト総数のカウント
•デバッグ⽤各種フック
•各イベントを
Boost.Signals2 で発⾏
•その他
allocate/deallocate,
construct/destroy に
フックを仕掛ける
allocate/deallocate,
construct/destroy に
フックを仕掛ける
63
•メモリ使⽤総量,オブジェ
クト総数のカウント
•デバッグ⽤各種フック
•各イベントを
Boost.Signals2 で発⾏
•その他
ここから中級の話その1
64
pointer 型をスマート
ポインタとしてカスタマイズ
65
pointer 型をスマート
ポインタとしてカスタマイズ
66
Q. アロケータを使う側が
allocate/construct に対応
する deallocate/destroy を
ちゃんと呼び出すはずだから,
スマートポインタにする必要
ないのでは?
67
int main(){
vector<int> v(a);
f(move(v));
.....
}
void f(vector v){
.....
.....
}
a.exe (デバッグビルド) b.dll (リリースビルド)
デバッグビルドの new で獲得したメモリを
リリースビルドの delete で解放><;
new/delete の
ABI ⾮互換性の克服
pointer 型をスマート
ポインタとしてカスタマイズ
68
template<typename T>
struct RobustAlloc {
typedef std::shared_ptr<T> pointer;
.....
pointer allocate(size_t n)
{
return pointer(
new char[n * sizeof(T)],
[](void *p) { delete p[]; });
}
void deallocate(pointer p, size_type n)
{ /* do nothing */ }
};
69
int main(){
RobustAlloc a;
vector<int, RobustAlloc> v(a);
f(move(v));
.....
}
void f(vector v){
.....
.....
}
a.exe (デバッグビルド) b.dll (リリースビルド)
new/delete の
ABI ⾮互換性の克服
デバッグビルドの new でメモリを獲得,
デバッグビルドの delete で解放するのでO.K.
(詳しくは 私の第1回 Boost.勉強会参照)
ここから中級の話その1.5
70
construct/destroy でコン
テナ要素の⽣成をハック
71
vector<string> v;
v.emplace(“Hello”);
呼ばれるコンストラクタは
string(“Hello”)
construct/destroy でコン
テナ要素の⽣成をハック
72
template<typename T>
struct MyAlloc {
template<typenmae... Args>
void construct(T *p, Args &&... args) {
::new ((void *)p)
(std::forward<Args>(args)...,
AnotherAlloc a_);
}
.....
AnotherAlloc a_;
};
construct/destroy でコン
テナ要素の⽣成をハック
73
template<typename T>
struct MyAlloc {
template<typenmae... Args>
void construct(T *p, Args &&... args) {
::new ((void *)p)
(std::forward<Args>(args)...,
AnotherAlloc a_);
}
.....
AnotherAlloc a_;
};
元々のコンストラクタの引数に
a_ を付け加えてコンストラクタを呼び出し
construct/destroy でコン
テナ要素の⽣成をハック
74
vector<string, MyAlloc> v;
v.emplace(“Hello”);
実際に呼ばれるコンストラクタは
string(“Hello”, a_)
construct/destroy でコン
テナ要素の⽣成をハック
75
vector<string, MyAlloc> v;
v.emplace(“Hello”);
実際に呼ばれるコンストラクタは
string(“Hello”, a_)
アロケータはコンテナ要素の構築
⽅法を完全に乗っ取ることが可能.
ここから中級の話その2
76
77
Template<typename T>
class IndirectPointer {
T **p_;
.....
T &operator*() { return **p_; }
};
Template<typename T>
class IndirectAlloc;
アロケータカスタマイズに
よる ptr_containers
78
Template<typename T>
IndirectAlloc<T>::allocate;
sizeof(T) * n バイトではなく
sizeof(T *) * n バイトを確保
アロケータカスタマイズに
よる ptr_containers
79
Template<typename T>
IndirectAlloc<T>::allocate;
Template<typename T>
IndirectAlloc<T>::construct;
sizeof(T) * n バイトではなく
sizeof(T *) * n バイトを確保
(T 型のオブジェクト)
アロケータカスタマイズに
よる ptr_containers
80
vector<int, IndirectAlloc<int> > v;
// boost::ptr_vector<int> 相当
list<int, IndirectAlloc<int> > l;
// boost::ptr_list<int> 相当
アロケータカスタマイズに
よる ptr_containers
アロケータカスタマイズに
よる ptr_containers
81
vector<int, IndirectAlloc<int> > v;
// boost::ptr_vector<int> 相当
list<int, IndirectAlloc<int> > l;
// boost::ptr_list<int> 相当
さらにアロケータの construct を加工し
て, factory に転送して動的多相な形で
コンテナの要素を乗せることが可能.
ここから上級の話
Scoped Allocator Model
82
vector<string> v;
83
vector<string> に string を
追加し続ける例
プログラム中のいろんな場所から
参照され,要素が追加されると仮定
vector<string> v;
84
v.emplace_back(“hoge”);
v.emplace_back(“fuga”);
vector<string> に string を
追加し続ける例
vector の部分はメモリの再割り当て
が必要だが, string の部分は超単純
な割り当て戦略でよい.
vector<string> v;
85
vector<string> に string を
追加し続ける例
86
(外側のアロケータ)
デフォルトのアロケータとして振る舞う
(内側のアロケータ)
単純なアロケータ(リージョン・アリーナ)
として振る舞う
ネストされたアロケータ
vector<string> に string を
追加し続ける例
87
(外側のアロケータ)
デフォルトのアロケータとして振る舞う
construct で内側のアロケータを引数に追加
(内側のアロケータ)
単純なアロケータ(リージョン・アリーナ)
として振る舞う
NestedAllocator
vector<string> に string を
追加し続ける例
vector<string> に string を
追加し続ける例
88
vector<string, NestedAlloc<string> > v;
v.emplace_back(“hoge”);
v.emplace_back(“fuga”);
v
string “hoge”
“fuga”
・
・
・
string
・
・
・外側のアロケータの
メモリリソース
内側のアロケータの
メモリリソース
今⽇⾔いに来たこと(再掲)
89
アロケータは
(de)?allocate をカスタ
マイズしたら終わりではあ
りません.
allocate/deallocate を
カスタマイズする前に
90
超単純なアロケータ実装以外では
ほとんど意味なかった←結論
超単純なアロケータとは?
Region/Arena Allocator
91
メモリをドバっと確保して
92
先頭から順に確保
超単純なアロケータとは?
Region/Arena Allocator
93
先頭から順に確保
超単純なアロケータとは?
Region/Arena Allocator
94
先頭から順に確保
超単純なアロケータとは?
Region/Arena Allocator
これからのアロケータ
95
アロケータのカスタマイズに
よる最⼤の弊害
96
アロケータのカスタマイズ
=
型を変える
=
オブジェクト同⼠の
相互運⽤性低下
型消去による動的多相アロケー
タ – polymorphic_allocator
97
アロケータのカスタマイズ
しつつ,型を消去してオブ
ジェクト同⼠の相互運⽤性
を維持する
polymorphic_allocator まとめ
98
規格の⽂⾔を書くのが間に合いませんでした
polymorphic_allocator まとめ
99
規格の⽂⾔を書くのが間に合いませんでした
100
201z/xx/yy Cryolite
Boost.勉強会 #n 大阪
Allocators@C++14
coming soon...
1z

More Related Content

What's hot

中3女子でもわかる constexpr
中3女子でもわかる constexpr中3女子でもわかる constexpr
中3女子でもわかる constexprGenya Murakami
 
大規模サービスを支えるネットワークインフラの全貌
大規模サービスを支えるネットワークインフラの全貌大規模サービスを支えるネットワークインフラの全貌
大規模サービスを支えるネットワークインフラの全貌LINE Corporation
 
【Unity】 Behavior TreeでAIを作る
 【Unity】 Behavior TreeでAIを作る 【Unity】 Behavior TreeでAIを作る
【Unity】 Behavior TreeでAIを作るtorisoup
 
ネットワーク ゲームにおけるTCPとUDPの使い分け
ネットワーク ゲームにおけるTCPとUDPの使い分けネットワーク ゲームにおけるTCPとUDPの使い分け
ネットワーク ゲームにおけるTCPとUDPの使い分けモノビット エンジン
 
QEMUでARM64bitベアメタルプログラミング
QEMUでARM64bitベアメタルプログラミングQEMUでARM64bitベアメタルプログラミング
QEMUでARM64bitベアメタルプログラミングYuma Ohgami
 
古典プログラマ向け量子プログラミング入門 [フル版]
古典プログラマ向け量子プログラミング入門 [フル版]古典プログラマ向け量子プログラミング入門 [フル版]
古典プログラマ向け量子プログラミング入門 [フル版]OsSAL
 
UE4におけるキャラクタークラス設計
UE4におけるキャラクタークラス設計UE4におけるキャラクタークラス設計
UE4におけるキャラクタークラス設計Masahiko Nakamura
 
Flutter移行の苦労と、乗り越えた先に得られたもの
Flutter移行の苦労と、乗り越えた先に得られたものFlutter移行の苦労と、乗り越えた先に得られたもの
Flutter移行の苦労と、乗り越えた先に得られたものRecruit Lifestyle Co., Ltd.
 
「おうちクラウド」が今熱い!
「おうちクラウド」が今熱い!「おうちクラウド」が今熱い!
「おうちクラウド」が今熱い!Hirotaka Sato
 
出張ヒストリア ブループリントを書くにあたって大切なこと
出張ヒストリア ブループリントを書くにあたって大切なこと出張ヒストリア ブループリントを書くにあたって大切なこと
出張ヒストリア ブループリントを書くにあたって大切なことhistoria_Inc
 
Unityで始めるバージョン管理 Git LFS 入門編
Unityで始めるバージョン管理 Git LFS 入門編Unityで始めるバージョン管理 Git LFS 入門編
Unityで始めるバージョン管理 Git LFS 入門編NAKAOKU Takahiro
 
ピクサー USD 入門 新たなコンテンツパイプラインを構築する
ピクサー USD 入門 新たなコンテンツパイプラインを構築するピクサー USD 入門 新たなコンテンツパイプラインを構築する
ピクサー USD 入門 新たなコンテンツパイプラインを構築するTakahito Tejima
 
12 分くらいで知るLuaVM
12 分くらいで知るLuaVM12 分くらいで知るLuaVM
12 分くらいで知るLuaVMYuki Tamura
 
Intro to SVE 富岳のA64FXを触ってみた
Intro to SVE 富岳のA64FXを触ってみたIntro to SVE 富岳のA64FXを触ってみた
Intro to SVE 富岳のA64FXを触ってみたMITSUNARI Shigeo
 
CUDAのアセンブリ言語基礎のまとめ PTXとSASSの概説
CUDAのアセンブリ言語基礎のまとめ PTXとSASSの概説CUDAのアセンブリ言語基礎のまとめ PTXとSASSの概説
CUDAのアセンブリ言語基礎のまとめ PTXとSASSの概説Takateru Yamagishi
 
MRU : Monobit Reliable UDP ~5G世代のモバイルゲームに最適な通信プロトコルを目指して~
MRU : Monobit Reliable UDP ~5G世代のモバイルゲームに最適な通信プロトコルを目指して~MRU : Monobit Reliable UDP ~5G世代のモバイルゲームに最適な通信プロトコルを目指して~
MRU : Monobit Reliable UDP ~5G世代のモバイルゲームに最適な通信プロトコルを目指して~モノビット エンジン
 
20221110_Node-RED_Con_2023_kitazaki_v1.pdf
20221110_Node-RED_Con_2023_kitazaki_v1.pdf20221110_Node-RED_Con_2023_kitazaki_v1.pdf
20221110_Node-RED_Con_2023_kitazaki_v1.pdfAyachika Kitazaki
 

What's hot (20)

実行速度の最適化のあれこれ プラス おまけ
実行速度の最適化のあれこれ プラス おまけ  実行速度の最適化のあれこれ プラス おまけ
実行速度の最適化のあれこれ プラス おまけ
 
中3女子でもわかる constexpr
中3女子でもわかる constexpr中3女子でもわかる constexpr
中3女子でもわかる constexpr
 
大規模サービスを支えるネットワークインフラの全貌
大規模サービスを支えるネットワークインフラの全貌大規模サービスを支えるネットワークインフラの全貌
大規模サービスを支えるネットワークインフラの全貌
 
【Unity】 Behavior TreeでAIを作る
 【Unity】 Behavior TreeでAIを作る 【Unity】 Behavior TreeでAIを作る
【Unity】 Behavior TreeでAIを作る
 
ネットワーク ゲームにおけるTCPとUDPの使い分け
ネットワーク ゲームにおけるTCPとUDPの使い分けネットワーク ゲームにおけるTCPとUDPの使い分け
ネットワーク ゲームにおけるTCPとUDPの使い分け
 
QEMUでARM64bitベアメタルプログラミング
QEMUでARM64bitベアメタルプログラミングQEMUでARM64bitベアメタルプログラミング
QEMUでARM64bitベアメタルプログラミング
 
古典プログラマ向け量子プログラミング入門 [フル版]
古典プログラマ向け量子プログラミング入門 [フル版]古典プログラマ向け量子プログラミング入門 [フル版]
古典プログラマ向け量子プログラミング入門 [フル版]
 
UE4におけるキャラクタークラス設計
UE4におけるキャラクタークラス設計UE4におけるキャラクタークラス設計
UE4におけるキャラクタークラス設計
 
Flutter移行の苦労と、乗り越えた先に得られたもの
Flutter移行の苦労と、乗り越えた先に得られたものFlutter移行の苦労と、乗り越えた先に得られたもの
Flutter移行の苦労と、乗り越えた先に得られたもの
 
「おうちクラウド」が今熱い!
「おうちクラウド」が今熱い!「おうちクラウド」が今熱い!
「おうちクラウド」が今熱い!
 
出張ヒストリア ブループリントを書くにあたって大切なこと
出張ヒストリア ブループリントを書くにあたって大切なこと出張ヒストリア ブループリントを書くにあたって大切なこと
出張ヒストリア ブループリントを書くにあたって大切なこと
 
Topological sort
Topological sortTopological sort
Topological sort
 
Unityで始めるバージョン管理 Git LFS 入門編
Unityで始めるバージョン管理 Git LFS 入門編Unityで始めるバージョン管理 Git LFS 入門編
Unityで始めるバージョン管理 Git LFS 入門編
 
Unreal Engine 5 早期アクセスの注目機能総おさらい Part 2
Unreal Engine 5 早期アクセスの注目機能総おさらい Part 2Unreal Engine 5 早期アクセスの注目機能総おさらい Part 2
Unreal Engine 5 早期アクセスの注目機能総おさらい Part 2
 
ピクサー USD 入門 新たなコンテンツパイプラインを構築する
ピクサー USD 入門 新たなコンテンツパイプラインを構築するピクサー USD 入門 新たなコンテンツパイプラインを構築する
ピクサー USD 入門 新たなコンテンツパイプラインを構築する
 
12 分くらいで知るLuaVM
12 分くらいで知るLuaVM12 分くらいで知るLuaVM
12 分くらいで知るLuaVM
 
Intro to SVE 富岳のA64FXを触ってみた
Intro to SVE 富岳のA64FXを触ってみたIntro to SVE 富岳のA64FXを触ってみた
Intro to SVE 富岳のA64FXを触ってみた
 
CUDAのアセンブリ言語基礎のまとめ PTXとSASSの概説
CUDAのアセンブリ言語基礎のまとめ PTXとSASSの概説CUDAのアセンブリ言語基礎のまとめ PTXとSASSの概説
CUDAのアセンブリ言語基礎のまとめ PTXとSASSの概説
 
MRU : Monobit Reliable UDP ~5G世代のモバイルゲームに最適な通信プロトコルを目指して~
MRU : Monobit Reliable UDP ~5G世代のモバイルゲームに最適な通信プロトコルを目指して~MRU : Monobit Reliable UDP ~5G世代のモバイルゲームに最適な通信プロトコルを目指して~
MRU : Monobit Reliable UDP ~5G世代のモバイルゲームに最適な通信プロトコルを目指して~
 
20221110_Node-RED_Con_2023_kitazaki_v1.pdf
20221110_Node-RED_Con_2023_kitazaki_v1.pdf20221110_Node-RED_Con_2023_kitazaki_v1.pdf
20221110_Node-RED_Con_2023_kitazaki_v1.pdf
 

More from Cryolite

左と右の話
左と右の話左と右の話
左と右の話Cryolite
 
Lambda in template_final
Lambda in template_finalLambda in template_final
Lambda in template_finalCryolite
 
家に帰るまでが遠足です
家に帰るまでが遠足です家に帰るまでが遠足です
家に帰るまでが遠足ですCryolite
 
Destructive Call
Destructive CallDestructive Call
Destructive CallCryolite
 
Boost.PropertyMap (.pptx)
Boost.PropertyMap (.pptx)Boost.PropertyMap (.pptx)
Boost.PropertyMap (.pptx)Cryolite
 
Boost.PropertyMap (.pdf)
Boost.PropertyMap (.pdf)Boost.PropertyMap (.pdf)
Boost.PropertyMap (.pdf)Cryolite
 
shared_ptr & weak_ptr (ppt 第2版, DL 専用)
shared_ptr & weak_ptr (ppt 第2版, DL 専用)shared_ptr & weak_ptr (ppt 第2版, DL 専用)
shared_ptr & weak_ptr (ppt 第2版, DL 専用)Cryolite
 
shared_ptr & weak_ptr (ppt 初版, DL 専用)
shared_ptr & weak_ptr (ppt 初版, DL 専用)shared_ptr & weak_ptr (ppt 初版, DL 専用)
shared_ptr & weak_ptr (ppt 初版, DL 専用)Cryolite
 

More from Cryolite (8)

左と右の話
左と右の話左と右の話
左と右の話
 
Lambda in template_final
Lambda in template_finalLambda in template_final
Lambda in template_final
 
家に帰るまでが遠足です
家に帰るまでが遠足です家に帰るまでが遠足です
家に帰るまでが遠足です
 
Destructive Call
Destructive CallDestructive Call
Destructive Call
 
Boost.PropertyMap (.pptx)
Boost.PropertyMap (.pptx)Boost.PropertyMap (.pptx)
Boost.PropertyMap (.pptx)
 
Boost.PropertyMap (.pdf)
Boost.PropertyMap (.pdf)Boost.PropertyMap (.pdf)
Boost.PropertyMap (.pdf)
 
shared_ptr & weak_ptr (ppt 第2版, DL 専用)
shared_ptr & weak_ptr (ppt 第2版, DL 専用)shared_ptr & weak_ptr (ppt 第2版, DL 専用)
shared_ptr & weak_ptr (ppt 第2版, DL 専用)
 
shared_ptr & weak_ptr (ppt 初版, DL 専用)
shared_ptr & weak_ptr (ppt 初版, DL 専用)shared_ptr & weak_ptr (ppt 初版, DL 専用)
shared_ptr & weak_ptr (ppt 初版, DL 専用)
 

Allocators@C++11