この記事は、董澤潤氏が執筆した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 コードも受け入れられません。通常、次の型をポインターとして定義する必要があります。
公式サイトで提示されている解決策は、次をポインターボックスに変えることです |
<<: 米国の刑務所、受刑者の通話を分析するために人工知能を導入する計画
>>: 日本メディア:中国は人工知能の分野で米国を追い越している
人工知能の時代音声、指紋、顔認識など。 AI技術は飛躍的に進歩している犯罪者もこれに気づいているこの...
世界的な科学技術革命と産業変革の新たな局面が本格化している。人工知能は、新たな科学技術革命と産業変革...
先月、イーロン・マスク氏は公開書簡でAIシステムの開発を6か月間停止するよう求め、「人間と競合する知...
大規模モデルの出現は、インテリジェントエージェントの設計に革命的な変化を引き起こしました。ChatG...
[[238920]]ファッション業界における人工知能(AI)技術の応用はますます深く広範囲になって...
[51CTO.com からのオリジナル記事] 今日の情報化社会には、さまざまな情報リソースが溢れて...
科学技術の継続的な進歩により、インテリジェント製品は徐々に日常生活に統合され、人工知能は現代の発展の...
この記事はAI新メディアQuantum Bit(公開アカウントID:QbitAI)より許可を得て転載...
ロボットは科学者の主な研究分野となっており、この分野の技術が進歩し続けると、ロボットがこの社会の主な...
この記事はAI新メディアQuantum Bit(公開アカウントID:QbitAI)より許可を得て転載...
企業の世界における人工知能の利点は何でしょうか?企業分野における AI の主な利点の 1 つは、プロ...
前回の記事では、PaddlePaddle を使用して手書きの数字を認識する例を示し、ネットワーク構造...