したらばTOP ■掲示板に戻る■ 全部 1-100 最新50 | |
レス数が900を超えています。1000を超えると投稿できなくなるよ。

便利なツール・ソフトを作るスレ Ver.18

878(・ω・):2022/07/09(土) 10:23:55 ID:wvxU3Un.
アドオン書いてる人にちょっとしたお話(?) わかってる人もいるとは思うというか思いたい
C++ の類だと for( int i = 0; 10 > i; i++ ) if( 0 == hoge[ i ] ) 〜 みたいにすれば
ほぼ最速で線形サーチできるけど、lua の場合はそうはいかない
lua はテーブルのインデックス(キー)として何でも指定できる代わりに
hoge[ 1 ] とかするだけで O(1) の検索をしなきゃならない
C++ みたいに hoge[ i ] を 1から10 まで検索とかするだけで O(1) の検索を10回行う事になる
O(1) は速いとか言うけどそれはアルゴリズム的なお話であって
冒頭の C++ みたいなネイティブなコードと比べると何倍も遅い
lua でネイティブなコードに近い線形検索を行う方法は
for key, val in ipairs( hoge ) do 〜 しかない、つまり順不同

こっからが本題
lua の場合クラスインスタンスに相当するテーブルの中身もキーを持った値だから
hoge.method = "fuga" とか hoge.fuga( piyo ) するだけでも O(1)検索 が行われる
つまり昔のオブジェクト指向だの何だのに従って綺麗に作ろうとすると
C++ の類では考えられなかったようなオーバーヘッドが発生する
これを意識できるかどうかで速度が大分変るし、この辺りを理解してれば
lua でのメモリ配置のフラグメントとかも想像しやすくなるかも知れない
アドオンのメモリ消費量を考えて貰えると全俺が喜びます


新着レスの表示


名前: E-mail(省略可)

※書き込む際の注意事項はこちら

※画像アップローダーはこちら

(画像を表示できるのは「画像リンクのサムネイル表示」がオンの掲示板に限ります)

掲示板管理者へ連絡 無料レンタル掲示板