[過去ログ]
Rust part24 (1002レス)
Rust part24 http://mevius.5ch.net/test/read.cgi/tech/1716759686/
上
下
前次
1-
新
通常表示
512バイト分割
レス栞
抽出解除
必死チェッカー(本家)
(べ)
自ID
レス栞
あぼーん
このスレッドは過去ログ倉庫に格納されています。
次スレ検索
歴削→次スレ
栞削→次スレ
過去ログメニュー
389: デフォルトの名無しさん [sage] 2024/06/27(木) 04:33:33.49 ID:TDzAch9x >>388 自分でヒープメモリ管理部分を書いてみるとよくわかる ヒープでメモリ確保したり解放したりするのは色んな処理が入って非常に遅い スタック上ならそのコストはない 関数に入る&抜けるときにスタックフレームを指してるレジスタの値を変えるだけ というのに加えて CPUの多段メモリキャッシュ機構での速さが桁が変わってくる スタックフレーム上なら常にアクセスしていてキャッシュに載るから超速い http://mevius.5ch.net/test/read.cgi/tech/1716759686/389
400: デフォルトの名無しさん [sage] 2024/06/27(木) 11:56:53.85 ID:TDzAch9x >>395 スタックフレーム同士も連続しているし レジスタ退避でアクセスしているし 他のローカル変数もスタック上にありアクセスしているから スタック上に確保すればキャッシュ上にある http://mevius.5ch.net/test/read.cgi/tech/1716759686/400
401: デフォルトの名無しさん [sage] 2024/06/27(木) 12:00:05.74 ID:TDzAch9x >>399 関数が値を返す場合にサイズが小さければレジスタで返す サイズが大きい場合は呼び出し元のスタックフレームに領域を確保してそこへ直接書き込んでいる つまり暗に可変参照を渡す最適化が行われている それはサイズの大きい値を返す関数呼び出しが多段でも同じなので一番最初の関数のスタックフレームに直接書き込まれる http://mevius.5ch.net/test/read.cgi/tech/1716759686/401
404: デフォルトの名無しさん [sage] 2024/06/27(木) 12:53:21.92 ID:TDzAch9x >>402 いや>>399の話も正しいんだよ 重要なのはRust上の概念とその実現方法(実装)とその最適化の3つは当然異なるということ 所有権を移すとはmoveという概念であって moveの実装はコピー(してコピー元を使わない) ただし無駄なコピーは最適化で消える 例えば大きなサイズの構造体を関数が返す場合は呼び出し元の関数のスタックフレーム上に直接書き込まれることで無駄なコピーが発生しない http://mevius.5ch.net/test/read.cgi/tech/1716759686/404
417: デフォルトの名無しさん [sage] 2024/06/27(木) 22:40:30.91 ID:TDzAch9x >>406 そのmoveについてもmoveというRust上の概念の理解のみがRustを学習&利用していく上で必要となるよ moveによる生成コードがどのようになるかは最適化の方法の変更や進化で変わり得る話だから確定することはできず、学ぶこともできない こんな場合に現在はたまたまこんな生成コードになっていることだけは実験などでわかるけど今後の保証はない、としか言えない だからmoveはmoveとして理解することが唯一の正解でしょう http://mevius.5ch.net/test/read.cgi/tech/1716759686/417
420: デフォルトの名無しさん [sage] 2024/06/27(木) 23:03:07.98 ID:TDzAch9x Rustの各概念を無理矢理なC/C++と結びつけようとしたり生成コードと対応させようとしてる人々がRustを難しいと言ってるようにみえる そんなことをせずに各概念の理解だけに集中すればRustはシンプルに出来ていてわかりやすい言語だと理解できるよ http://mevius.5ch.net/test/read.cgi/tech/1716759686/420
メモ帳
(0/65535文字)
上
下
前次
1-
新
書
関
写
板
覧
索
設
栞
歴
スレ情報
赤レス抽出
画像レス抽出
歴の未読スレ
AAサムネイル
Google検索
Wikipedia
ぬこの手
ぬこTOP
0.035s