この記事は、董澤潤氏が執筆したWeChat公開アカウント「董澤潤の技術ノート」から転載したものです。この記事を転載する場合は、Dong Zerun の Technical Notes 公開アカウントにご連絡ください。 C++に精通している人はshared_ptr、unique_ptrを知っているはずです。また、RustにはスマートポインタBox、Rc、Arc、RefCellなどがあります。この記事では、Boxの基礎となる実装を紹介します。 箱 入門例この例は Rust の本から引用したものです。デモンストレーションの目的で、print ステートメントは削除されています。
変数 0x11223344 をヒープ上に割り当てる、いわゆるボクシングですが、Java の学習者ならよく知っているはずです。 dockerをマウントし、rust-gdbを使用してアセンブリ実装を表示してみましょう。
重要なポイントは 2 つあります。alloc::alloc::exchange_malloc はヒープ上にメモリ領域を割り当て、この malloc のアドレスに 0x11223344 を格納します。 関数の最後では、コンパイラは型が alloc::boxed::Box であることを認識しているため、アドレスは core::ptr::drop_in_place に渡されて解放されます。 この例だけを見ると、Box は不思議ではありません。対応するアセンブリ実装は、通常のポインタと何ら変わりありません。すべての制約はコンパイル時の動作です。 所有
この例では、文字列はボックス化されていますが、String は広い意味でスマート ポインターであるため、ボックス化する必要はありません。この例ではエラーが報告されます
*xはStringに逆参照され、yに割り当てられると移動セマンティクスが実行され、所有権がなくなるため、後続のprintlnはxを印刷できません。
これを修正するには、文字列への不変の参照を取得します。 低レベルの実装
上記は Box の定義です。これは 2 つのジェネリック パラメータを持つタプル構造であることがわかります。T は任意の型を表し、A はメモリ アロケータを表します。 A は標準ライブラリの Gloal のデフォルト値です。 T にはジェネリック制約 ?Sized があり、これは型のサイズがコンパイル時にわかる場合とわからない場合があることを意味します。もちろん、これは通常、サイズが不明なシナリオで使用され、上記のように int を格納することはほとんどありません。
これはDrop実装であり、ソースコードにも記載されており、コンパイラによって実装されています。
逆参照動作を定義するために Deref を実装し、可変逆参照のために DerefMut を実装しました。したがって、*xは*(x.deref())という演算に対応する。 適用可能なシナリオ 公式サイトでは以下の3つのシナリオが挙げられています。本質的にはBoxは通常のポインタとあまり変わらないので、Rc、Arc、RefCellほど便利ではありません。
公式サイトにはリンクリストの実装がある
上記のコードは実行できませんが、その理由は非常に単純です。これは再帰的な定義です。対応する C コードも受け入れられません。通常、次の型をポインターとして定義する必要があります。
公式サイトで提示されている解決策は、次をポインターボックスに変えることです |
<<: 米国の刑務所、受刑者の通話を分析するために人工知能を導入する計画
>>: 日本メディア:中国は人工知能の分野で米国を追い越している
年齢を重ねるにつれ、老化を遅らせて若さを取り戻すことが多くの人の夢となります。 クレオパトラにしろ、...
4月7日、権威あるAIベンチマーク評価組織MLPerfが最新の推論パフォーマンスリストを公開した。 ...
経済が不況に陥っているため、テクノロジー業界の大手企業は給与を削減したり、従業員を解雇したりしている...
[[187627]]機械学習は、Apple の Siri や Google のアシスタントなどのス...
[[261281]]新興技術への投資家として、私は既存の市場を改善したり、新しい市場を創出したりで...
[[437362]]石油・ガス生産者の操業実績を測る指標は数多くあり、効率性の向上、コストの削減、油...
短波赤外線ベースのエレクトロルミネッセンスイメージングは、太陽光発電パネルの欠陥検出に有望です。...
[[409064]]みなさんこんにちは。私は梁唐です。今日は、検索、広告、推奨アルゴリズムにおける...
[元記事は51CTO.comより]最近、エンターテインメントビッグデータアプリケーションサービスプロ...
この記事は、Heart of Autonomous Driving の公開アカウントから許可を得て転...
建設業界へのドローンの導入は、高度な建設手順を合理化することで業界に大きな変化をもたらしました。建設...
最近、当社の自動運転デビューがニュースで取り上げられており、ADS はついに謎の組織ではなくなりまし...
IT Homeは1月19日、マイクロソフトが最近、学生向けの新しい生成AIツール「Reading C...
翻訳者 |李睿レビュー | Chonglou 今日では、 ChatGPTのような生成AI技術のおかげ...