Rustアンチスレ (202レス)
上
下
前
次
1-
新
145
(3)
: 2022/05/23(月)09:54
ID:n2ZPTBPD(3/3)
AA×
>>144
>>137
[240|
320
|
480
|
600
|
100%
|
JPG
|
べ
|
レス栞
|
レス消
]
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
一般的に今回のような多段の計算の場合は中間領域が少なくともつ必要となる なぜなら一般的には中間値中間値次の項目と順に計算していくためである つまり一般的な場合はつの変数の足し算ならば中間値つを加えて計つの領域を必要とする しかしの結果のアドレスを見ると確かに中間値は交互にアドレスが異なり種類だが全体でつの領域で済んでいるところに注目 つの変数の領域は避けられないから余分に確保されたのはつのみで済んでいる これが 今回用意した型はを実装しなかったため最初の中間値を計算した時点てとは消費されてそれらの領域は解放される そのため次の中間値中間値の時に中間値の領域として既に解放されたの領域が使われた 実際に中間値のアドレスがと同じになっていることで確認できる 同様に中間値は中間値と同じアドレスとなっている 結論 では消費し終えた変数や中間値が使用していたヒープ領域もすぐに再利用されて使い回されるため のようなケースでも最小限のメモリしか必要とせずに済む
上
下
前
次
1-
新
書
関
写
板
覧
索
設
栞
歴
あと 57 レスあります
スレ情報
赤レス抽出
画像レス抽出
歴の未読スレ
AAサムネイル
ぬこの手
ぬこTOP
0.030s