Rustアンチスレ (202レス)
Rustアンチスレ http://mevius.5ch.net/test/read.cgi/tech/1509028624/
上
下
前次
1-
新
通常表示
512バイト分割
レス栞
抽出解除
レス栞
リロード規制
です。10分ほどで解除するので、
他のブラウザ
へ避難してください。
137: デフォルトの名無しさん [sage] 2022/05/23(月) 01:45:51.46 ID:Fl/zPM6P 誤送信 >>135 行列クラス考えてみろ while(1) E = A*B+C/D; C++なら一行でかけるがテンポラリ領域を演算子の多重定義の中で確保開放繰り返さざるをえない ETでなんとかなる部分もinverseがあるとそれもお手上げ 一時領域をwhileの外で確保してそれを使い回す方法と比べて早くしようがない。 http://mevius.5ch.net/test/read.cgi/tech/1509028624/137
139: デフォルトの名無しさん [sage] 2022/05/23(月) 02:08:18.18 ID:aUQlcplw >>137 速度に関してはC++の方が不利なことに対しては異論ないよ ただフラグメントについては本当にそうなのか気になってた 今時のmallocなら直近にfreeされた領域再利用するから>>137みたいな例なら毎回同じ領域が割り当てられると思うよ 寿命が異なる複数のオブジェクトの確保・解放を繰り返すようなケースでも、オブジェクトが同サイズであればmalloc自体のフラグメントを防ぐ機構がうまく働いてくれるはず まあ確かにRTOSのmalloc実装では問題起こるかもしれないけどね ただ、そういうのは "最近の普通のmalloc" ではないと思う http://mevius.5ch.net/test/read.cgi/tech/1509028624/139
141: デフォルトの名無しさん [sage] 2022/05/23(月) 02:44:22.59 ID:Fl/zPM6P >>137 >速度に関してはC++の方が不利 これもちょっと違うだろ 上で>>131が言ってるようにBetter cに留めて。 過度な見やすさや書きやすさを追求しなければ C++はC機能包含してるんでC++で不利になることなんてない。 機能を使わなければいいんで不利になりようがない。 Pure C流ででもかけるわけだし http://mevius.5ch.net/test/read.cgi/tech/1509028624/141
142: デフォルトの名無しさん [sage] 2022/05/23(月) 08:16:07.89 ID:aUQlcplw >>140 とりあえずglibcのmallocでいいや >>137のような解放直後に同じサイズで領域を確保する場合は領域再利用されるよね http://mevius.5ch.net/test/read.cgi/tech/1509028624/142
145: デフォルトの名無しさん [sage] 2022/05/23(月) 09:54:21.07 ID:n2ZPTBPD 一般的に、今回のような多段の計算の場合は、中間領域が少なくとも2つ必要となる なぜなら、一般的には「中間値2=中間値1+次の項目」と順に計算していくためである つまり一般的な場合は、5つの変数の足し算ならば、中間値2つを加えて、計7つの領域を必要とする しかし>>144の結果のアドレスを見ると、確かに中間値は交互にアドレスが異なり2種類だが、全体で6つの領域で済んでいるところに注目 5つの変数の領域は避けられないから、余分に確保されたのは1つのみで済んでいる これがRust 今回用意したTest型はCopyを実装しなかったため、最初の「中間値1=a+b」を計算した時点てaとbは消費されてそれらの領域は解放される そのため次の「中間値2=中間値1+c」の時に、中間値2の領域として既に解放されたaの領域が使われた 実際に中間値2のアドレスがaと同じになっていることで確認できる 同様に中間値3は中間値1と同じアドレスとなっている 結論 Rustでは消費し終えた変数や中間値が使用していたヒープ領域もすぐに再利用されて使い回されるため、 >>137のようなケースでも最小限のメモリしか必要とせずに済む http://mevius.5ch.net/test/read.cgi/tech/1509028624/145
157: デフォルトの名無しさん [sage] 2022/05/30(月) 15:55:38.95 ID:MKPVbFKD >>142 > >>137のような解放直後に同じサイズで領域を確保する場合は領 なんで、マルチタスクのOSが、おまえの都合のいいタイミングで解法直後に確保できるのかと言ってる。 例えば、解法直後に割込タスクがおまえのプログラムを一時実行停止し、 そこで開放したばかりのメモリエリアを確保しないとなんで言い切れるんだと聞いてる。 そして、ページングの発生もなんでおこらないと決めてかかってるんだ? 今時のOSでww おまえが書き出したメモリエリアはあくまでプログラム側から見た論理アドレスだろ? そこが実はページング対象になってなかったとなぜ断言できるんだ。 http://mevius.5ch.net/test/read.cgi/tech/1509028624/157
メモ帳
(0/65535文字)
上
下
前次
1-
新
書
関
写
板
覧
索
設
栞
歴
スレ情報
赤レス抽出
画像レス抽出
歴の未読スレ
AAサムネイル
Google検索
Wikipedia
ぬこの手
ぬこTOP
0.016s