質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Rust

Rustは、MoFoが支援するプログラミング言語。高速性を維持しつつも、メモリ管理を安全に行うことが可能な言語です。同じコンパイル言語であるC言語やC++では困難だったマルチスレッドを実装しやすく、並行性という点においても優れています。

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

Q&A

解決済

1回答

1401閲覧

RustのVecとBoxed sliceの効率について

namuyan

総合スコア76

Rust

Rustは、MoFoが支援するプログラミング言語。高速性を維持しつつも、メモリ管理を安全に行うことが可能な言語です。同じコンパイル言語であるC言語やC++では困難だったマルチスレッドを実装しやすく、並行性という点においても優れています。

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

0グッド

0クリップ

投稿2020/03/28 04:09

Vec vs Boxed slice

https://godbolt.org/
要素の追加や削除の操作を行い&容量が小さく&一度決まれば内容が変化しないVecを大量に生成します。そこでこの用途としてBoxed sliceへの変換を行うことでパフォーマンスやメモリ使用量が改善するのではと考えました。

検索をすると似たような事を考えている人がいました。
Performance comparison of a Vec and a boxed slice

唯一の利点は、Vecが持つ容量フィールドを失うことです。 これらの配列をメモリ内に同時に多数持つ必要がない限り、オーバーヘッドはわずかなものになる可能性があります。

また、Vecのソースにはこのような文言があります。

Note that this will drop any excess capacity.

実際のところ、Boxed sliceへの変換によるパフォーマンスやメモリの変化の予測が立たず困っています。何かわかる方は回答の方をよろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

自己解決

以下の理由が無い限りBoxed sliceを用いる意味は無いと思います。
スタック領域に置かれるような型をヒープに置きたい理由がない限り利用する意味はないです。

  • Vectorは要素の削除では領域を解放しないがBox変換時に必要分以外は解放してくれる
  • 配列数を操作して欲しくない事を明示したい・固定である事を示したい
  • 大量に生成するので数bytesでも節約する必要がある

また、以下の点に注意が必要です。

  • Vectorに付随した便利な操作関数がBoxには実装されていない

投稿2020/04/06 08:02

編集2020/05/04 12:48
namuyan

総合スコア76

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問