この記事は、董澤潤氏が執筆した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 コードも受け入れられません。通常、次の型をポインターとして定義する必要があります。
公式サイトで提示されている解決策は、次をポインターボックスに変えることです |
<<: 米国の刑務所、受刑者の通話を分析するために人工知能を導入する計画
>>: 日本メディア:中国は人工知能の分野で米国を追い越している
[[227002]]今日お話しするのは、「そんな手術があるの?」と第一印象でとても驚く内容ですが、...
機械学習は、リアルタイムの需要予測、持続可能な物流、高度な予測分析など、大きなメリットをもたらします...
[51CTO.com]地理的制約と教師の制約により、中国では質の高い教育資源が常に極めて不足してい...
特に交通分野において、2021年は人工知能の発展が最も速く、需要が最も高まる年です。都市交通における...
この新しいフェーズは、ディープ テクノロジーの開発と採用のかつてない増加、世界の人口動態の大きな変化...
著者 | 王 睿平今日、大規模言語モデル技術が継続的に成熟するにつれ、専門家はそれを活用してインテリ...
近年の傾向に倣い、ディープラーニングは 2020 年も最も急速に成長している分野の 1 つであり続け...
トランスフォーマー モデルは現在、言語、視覚、強化学習などの分野での有効性から注目を集めています。た...
組織のエンドユーザーとますますインテリジェントになるソフトウェア ツールとの間の生産的なパートナーシ...
AI の力を活用することで、人事チームは複雑な課題に対処し、効率性を向上させ、前向きな職場環境を育む...
本日の記事では、グラフを使用して分散一貫性の実装原則を深く研究し、理解します。まず、自己を見つめ直す...
企業は、AI をエッジに押し上げるための最適な武器として、さまざまなチップ アーキテクチャを採用しよ...
この記事はAI新メディアQuantum Bit(公開アカウントID:QbitAI)より許可を得て転載...