HN40
Rustのsort_unstable_byでクロージャを複雑にしたら、逆にバイナリサイズが減った件
Rust sort_unstable_by with more complex closure unexpectedly shrunk binary
tracyspacy・約5時間前
Rust sort_unstable_by with more complex closure unexpectedly shrunk binary
面白い現象に遭遇したので共有します。sort_unstable_byのクロージャの中にbooleanの引数とif文を追加したところ、バイナリサイズが約1KB小さくなりました。具体的には以下の変更です:
// 変更前
|&a, &b| compare(a, b)
// 変更後
|&a, &b| if is_reverse { compare(b, a) } else { compare(a, b) }
本来ならバイナリサイズは少し増加すると予想していたのですが、実際は逆に軽量化しました。bloatyを使って調査したところ、quicksort関数が980バイト小さくなっていることが判明しました。インライン化の状態は変わっておらず、単純にquicksortの命令数が減っているようです。なぜこのような結果になったのか、いまだに原因を特定できていません。
ターゲット環境: arm-unknown-linux-gnueabihf
詳細はこちら:
https://pastebin.com/qJdTw49n
コミット履歴:
https://github.com/tracyspacy/fli/commit/a87a98be77cc1972a53e6399716a227d1135e76b