回答編集履歴
2
m
answer
CHANGED
@@ -2,10 +2,41 @@
|
|
2
2
|
|
3
3
|
アロケーターというのがあってすね・・・
|
4
4
|
|
5
|
+
> malloc関数は、PODでない場合は使ってはマズイはずです。
|
6
|
+
|
7
|
+
違います。単に未初期化な領域になるだけなので、配置newすればいいだけです。ただしアライメントは気をつけましょう。
|
8
|
+
|
5
9
|
> コピー可能なトリビアルは、C言語と互換性ありましたっけ??(PODでしたっけ?)
|
6
10
|
|
7
11
|
PODという概念は滅びましたので忘れてください。trivially copyable classならmemcpyで扱っても安全です。(かつて存在したPODという概念は考古学的にはtrivially copyable classかつstanderd layoutなクラスを指していた。)
|
8
12
|
|
13
|
+
> この場合、コンパイラ定義のデフォルトコンストラクタって付いてくるんでしたっけ?
|
14
|
+
|
15
|
+
YES.
|
16
|
+
|
17
|
+
[特殊メンバ関数とコンパイラによる暗黙宣言 - yohhoyの日記](http://d.hatena.ne.jp/yohhoy/20140704/p1)
|
18
|
+
|
19
|
+
> コンパイラ定義のデフォルトコンストラクタがあるなら、これはトリビアルでしょうか??
|
20
|
+
> それとも、ユーザー定義が1でもあれば、それはもうトリビアルで無くなってしまうんですか?
|
21
|
+
> おまけに、仮想関数までダメみたいですね。
|
22
|
+
> 仮想関数を持ってたら、トリビアルじゃ無くっちゃいます?
|
23
|
+
> これともコピー可能なトリビアルじゃ無くなっちゃいます??
|
24
|
+
|
25
|
+
単にtrivialというだけでは何がtrivialかわからないので、お話になりません。
|
26
|
+
|
27
|
+
> 前回の質問で、yumetodoさんが上げているコード、uninitialized_move_if_noexcept_or_copy()をアセンブリ言語レベルで人為的に最適化を施さないと、Linux kernelレベルの速度を出せいないのでは??
|
28
|
+
ということですね。
|
29
|
+
|
30
|
+
アセンブリで書けばコンパイラの最適化に勝てるという夢を見続けたいならばご自由に。
|
31
|
+
|
9
32
|
> コンストラクタ、デストラクタを全面的に使用しないで、速度、互換性を優先するか?
|
10
33
|
|
11
|
-
コンパイラの最適化をなめ過ぎでは?最適化なんて`-O2`つけとけば概ね十分です。あなたが考えつく程度の差は最適化だけで吹き飛びます。
|
34
|
+
コンパイラの最適化をなめ過ぎでは?最適化なんて`-O2`つけとけば概ね十分です。あなたが考えつく程度の差は最適化だけで吹き飛びます。
|
35
|
+
|
36
|
+
> OSは、速度が重要なので、C++で作ってカクカク動かれると困るんですよね。
|
37
|
+
|
38
|
+
動かないより遅いほうがいいに決まってます。
|
39
|
+
|
40
|
+
> それほど間違っていないPOD型
|
41
|
+
|
42
|
+
だからPODというのは考古学の分野ですってば!
|
1
m
answer
CHANGED
@@ -1,5 +1,6 @@
|
|
1
1
|
> このnewの部分をLinuxカーネルが採用しているスラブアローケータなどの確保関数に書き換えれば、行ける!!と考えました。
|
2
2
|
|
3
|
+
アロケーターというのがあってすね・・・
|
3
4
|
|
4
5
|
> コピー可能なトリビアルは、C言語と互換性ありましたっけ??(PODでしたっけ?)
|
5
6
|
|