Rustアンチスレ (202レス)
Rustアンチスレ http://mevius.5ch.net/test/read.cgi/tech/1509028624/
上
下
前次
1-
新
通常表示
512バイト分割
レス栞
抽出解除
必死チェッカー(本家)
(べ)
自ID
レス栞
あぼーん
リロード規制
です。10分ほどで解除するので、
他のブラウザ
へ避難してください。
143: デフォルトの名無しさん [sage] 2022/05/23(月) 09:11:41.94 ID:n2ZPTBPD // ヒープを使う型Testを作って実証実験 #[derive(Debug)] struct Test(Box<isize>); // Test型が作成される時に使われるnew()を実装 impl Test { fn new(n: isize) -> Self { let new = Test(Box::new(n)); // その時にヒープで確保されたアドレスを表示 println!("{:p} = Test::new({n})", new.0); new } } // Test型の足し算を実装 impl std::ops::Add for Test { type Output = Self; fn add(self, rhs: Self) -> Self::Output { Test::new(*self.0 + *rhs.0) } } // 足し算の途中で使われる一時領域のアドレスはどうなるか? fn main() { let a = Test::new(1); let b = Test::new(10); let c = Test::new(100); let d = Test::new(1000); let e = Test::new(10000); println!("{:?}", a + b + c + d + e); } http://mevius.5ch.net/test/read.cgi/tech/1509028624/143
144: デフォルトの名無しさん [sage] 2022/05/23(月) 09:17:13.61 ID:n2ZPTBPD 実行結果 0x55790623d9d0 = Test::new(1) 0x55790623d9f0 = Test::new(10) 0x55790623da10 = Test::new(100) 0x55790623da30 = Test::new(1000) 0x55790623da50 = Test::new(10000) 0x55790623da70 = Test::new(11) 0x55790623d9d0 = Test::new(111) 0x55790623da70 = Test::new(1111) 0x55790623d9d0 = Test::new(11111) Test(11111) つまり足し算で中間生成される一時的な領域は再利用されて使い回されていることが確認された したがって>>140の主張がおかしい http://mevius.5ch.net/test/read.cgi/tech/1509028624/144
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
メモ帳
(0/65535文字)
上
下
前次
1-
新
書
関
写
板
覧
索
設
栞
歴
スレ情報
赤レス抽出
画像レス抽出
歴の未読スレ
AAサムネイル
Google検索
Wikipedia
ぬこの手
ぬこTOP
0.015s