19/08/07 07:32:40.22 9Ff0DYo3.net
>>781
もう一つは、ヒープを使わなくて済む場合には、(native)スタックや
構造体に直にオブジェクトや配列などを埋め込むから。
Javaなどは、一般オブジェクトや配列は new Txxx などのように
必ずヒープから確保するのでここにかなりのオーバーヘッドが発生する。
また、N 個のデータがある場合、C++で1回 delete すると、O(1)で済むが、
Java/C# で、参照型変数 = null; などとした場合には、最悪、O(N)位かかってしまう
事があるらしい。それは、GC が N 個のデータを全て walk してしまうことが
あるから。
だから、データの量が増えた場合でも C++ は速度低下が余り起きずに安定して速いのに
対し、Java/C# ではどんどん遅くなる場合がある。それは GC があるから。
>>760
上記の事があるので、Java/C# は、native binary に直しても速くならない。
なぜなら、O(1)とO(N)の違いは「速度のオーダーの違い」で、いくらバックエンドの
コードやCPU自体を高速化しても埋まらないから。