[過去ログ]
Rust part15 (1002レス)
Rust part15 http://mevius.5ch.net/test/read.cgi/tech/1652347700/
上
下
前次
1-
新
通常表示
512バイト分割
レス栞
抽出解除
レス栞
このスレッドは過去ログ倉庫に格納されています。
次スレ検索
歴削→次スレ
栞削→次スレ
過去ログメニュー
61: デフォルトの名無しさん [sage] 2022/05/16(月) 20:45:13.08 ID:Mz4z3EAu 関数の深いところから順に構造体をムーブで返していって 各関数で渡ってきた構造体のアドレスを表示させてみた #[derive(Debug)] struct S([i32; 100]); fn main() { let mut s1 = sub1(100); s1.0[1] = 111; println!("s1: {:p}", &s1); println!("{s1:?}"); } fn sub1(p: i32) -> S { let q = p + 3; let mut s2 = sub2(q); s2.0[2] = p - 300; println!("s2: {:p}", &s2); s2 } fn sub2(s: i32) -> S { let t = s * 2; let mut s3 = S([123; 100]); s3.0[3] = t; println!("s3: {:p}", &s3); s3 } s1もs2もs3もアドレスが一致 ムーブではアドレスそのままであり ビットパターンのコピーが為されないという結論 http://mevius.5ch.net/test/read.cgi/tech/1652347700/61
63: デフォルトの名無しさん [sage] 2022/05/16(月) 21:06:43.52 ID:qW5+0T97 >>61 アドレスが同じか否かでコピーの有無を判断する意味はよくわからんが その理屈だとこのコードだと違うアドレスが表示されるからビットパターンのコピーがされてるって結論になるのか? #[derive(Debug)] struct S([i32; 100]); fn main() { let mut s1 = S([0; 100]); println!("s1: {:p}", &s1); let s2 = s1; println!("s2: {:p}", &s2); } http://mevius.5ch.net/test/read.cgi/tech/1652347700/63
64: デフォルトの名無しさん [sage] 2022/05/16(月) 21:07:20.55 ID:f/Xu02FO >>61 struct S {} fn main() { let s1 = S{}; println!("s1: {:p}", &s1); let s2 = s1; println!("s2: {:p}", &s2); } http://mevius.5ch.net/test/read.cgi/tech/1652347700/64
67: デフォルトの名無しさん [sage] 2022/05/16(月) 21:19:28.47 ID:51EzJkQ/ >>61 >>63 その二つの相異なる結果を見るとビットパターンのコピーはムーブ以外の要因で起きている?? http://mevius.5ch.net/test/read.cgi/tech/1652347700/67
69: デフォルトの名無しさん [sage] 2022/05/16(月) 21:38:19.38 ID:/vD2A9J9 >>61 高コストなCopyも実装してから確認してみてねww http://mevius.5ch.net/test/read.cgi/tech/1652347700/69
メモ帳
(0/65535文字)
上
下
前次
1-
新
書
関
写
板
覧
索
設
栞
歴
スレ情報
赤レス抽出
画像レス抽出
歴の未読スレ
AAサムネイル
Google検索
Wikipedia
ぬこの手
ぬこTOP
0.047s