問題タブ [memory-layout]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
651 参照

python - Python: mpi4py で不連続なデータを送信する

次元 (N,M) の C 順序行列があります。

そのうち、永続的な MPI リクエストを介して別のノードにを送信したいと考えています。ただし、 を使用するmpi4pyと、

スライスが連続していないために失敗します。誰かがこれについての方法を提案できますか? 私は、型を作成するときにMPI_Type_vectora を指定できるC を信じています。strideどうすればこれを達成できmpi4pyますか?

0 投票する
3 に答える
497 参照

c - C の構造体サイズ

出力:

なぜint a[0]考慮されないのですか?

私は試した:

そして出力:

a[0]構造体のメンバーです。では、なぜ構造の大きさに考慮されていないのでしょうか。

0 投票する
4 に答える
476 参照

c++ - マルチレベル継承で派生すると、仮想基本クラスはどうなりますか?

継承で遊んでいる間、私はたまたまこれを試しました:

それは私に出力を与えました6

以下は期待どおりに機能しましたが、出力が得られました3

なぜこの違い?そして、なぜそれは2番目のケースの2倍なのですか?

0 投票する
1 に答える
195 参照

haskell - Repa はデータのメモリ レイアウトを指定しますか?

Repa が「マニフェスト表現」のいずれかでデータのメモリ レイアウトを指定していることはわかりません。これはどこかに指定されていますか?

もちろん、実験を通じて調べることはできますが、レイアウトが公式のものであるか、いつでも変更される可能性があるかどうかを知りたい.

編集:明確にするために、 aStorable Vectorがどのようにレイアウトされているかは理解していますが、 Array U DIM2 Double(たとえば)が行優先、列優先、または何かおかしいのでしょうか。

0 投票する
2 に答える
2564 参照

c++ - 特性を入力してプライマリ基本クラスを識別します

少なくとも1つの仮想関数を持つクラスBaseがあり、これから単独で継承するクラスDerivedが(uintptr_t)derived - (uintptr_t)static_cast<Base*>(derived)ある場合、Derivedは標準レイアウトではありませんが、(Itanium ABIによって)ゼロであることが保証されます。ただし、一般的なケースでは、これは必ずしも正しいとは限りません(例:多重継承)。

あるクラスが別のクラスのプライマリ基本クラスであるかどうかを検出するために使用できるトレイトを作成することは可能ですか?

Itanium ABIの便利なセクション:

http://refspecs.linux-foundation.org/cxxabi-1.83.html

一次基本クラス

動的クラスの場合、オフセット0で仮想ポインターを共有する一意の基本クラス(存在する場合)。これは、存在する場合、最初の(直接基本クラスの順序で)非仮想動的基本クラスです。

動的クラス

仮想テーブルポインタを必要とするクラス(それまたはそのベースに1つ以上の仮想メンバー関数または仮想ベースクラスがあるため)。

0 投票する
3 に答える
2175 参照

c++ - 仮想継承の派生クラスのサイズ

私が得た出力は次のとおりです。

上記のコードでは、ClassD の出力が 16 である理由です。この仮想継承がどのように機能するかを明確に説明してください。

0 投票する
1 に答える
608 参照

visual-c++ - CUDA を使用した CPU と GPU コード間のメモリ レイアウトの不一致

私は非常に奇妙な状況を経験しています。私はこのテンプレート構造を持っています:

cpp ファイルと cu ファイルを分離するようにコードを構成したので、_functor オブジェクトが cpp ファイルで作成され、カーネル関数で使用されます。問題は、カーネル内で operator() を実行すると、コードを見ただけでは説明できないランダムな動作が見つかったことです。私の構造体がちょっと壊れていたようでした。したがって、a_functor オブジェクトで sizeof() を呼び出すと、次のことがわかりました。

  • CPU コード (カーネル外の .cpp および .cu): 64 バイト

  • GPU コード (カーネル内): 68 バイト

明らかに、全体を台無しにするある種のミスマッチがありました。さらに進んで、構造体パラメーター ポインターと構造体自体の間の距離を追跡し、生成されたメモリ レイアウトを検査しようとしましたが、次のような結果が得られました。

なぜ nvcc が私の構造体のためにこのメモリ レイアウトを生成したのか、私には本当に理解できません (その 4 バイトは何をすべきか!?!)。アラインメントの問題である可能性があると考え、a_functor を明示的にアラインしようとしましたが、カーネルで値によって渡されるため、できません。

コンパイルしようとすると、

エラー: win32 プラットフォームのグローバルルーチンに明示的なアラインメントが大きすぎるパラメーターを渡すことはできません

では、この奇妙な状況を解決するには (...これは nvcc のバグだと思います)、どうすればよいでしょうか? 私が考えることができる唯一のことは、前述のエラーを回避するために、アラインメントで遊んで、構造体をポインターでカーネルに渡すことです。しかし、私は本当に疑問に思っています.なぜそのメモリレイアウトが一致しないのですか?! 本当に意味不明…

詳細情報: Visual Studio 2008 を使用しており、Windows XP 32 ビット プラットフォームで MSVC を使用してコンパイルしています。最新の CUDA Toolkit 5.0.35 をインストールしました。私のカードは GeForce GTX 570 (計算能力 2.0) です。

0 投票する
2 に答える
1629 参照

c# - リフレクションを使用して、.Net 型がメモリ内でどのようにレイアウトされるかを判断する

C# でパーサー コンビネーターの最適化を試しています。シリアル化された形式がメモリ内形式と一致する場合に考えられる最適化の 1 つは、型のインスタンスまたは多くのインスタンスで解析されるデータの (安全でない) memcpy を実行することです。

最適化を適用できるかどうかを動的に判断するために、インメモリ形式がシリアル化された形式と一致するかどうかを判断するコードを記述したいと考えています。(明らかに、これは安全でない最適化であり、さまざまな微妙な理由で機能しない可能性があります。私は実験しているだけであり、本番コードでこれを使用する予定はありません。)

属性[StructLayout(LayoutKind.Sequential, Pack = 1)]を使用して、強制的にパディングを行わず、メモリ内の順序を宣言の順序と一致させます。私はリフレクションでその属性をチェックしますが、実際にはこれが確認するのは「パディングなし」です。フィールドの順序も必要です。(エラーが発生しやすいため、フィールドごとにFieldOffset属性を手動で指定する必要はありません。)

GetFieldsによって返されるフィールドの順序を使用できると想定しましたが、ドキュメントでは、順序が指定されていないことを明示的に示しています。

StructLayout 属性を使用してフィールドの順序を強制している場合、その順序を反映する方法はありますか?

editすべてのフィールドがblittableでなければならないという制限は問題ありません。

0 投票する
1 に答える
234 参照

cocoa-touch - NSMutableData を使用してメモリ内の連続したスペースを確保する

NSMutableData同じセクションで、連続したメモリを強制的に予約するにはどうすればよいですか? かなりの量のデータが少しずつ到着していますが、パフォーマンスは満足のいくものではありません。私のデータの合計サイズは一定です。

0 投票する
1 に答える
913 参照

c++11 - shared_ptr 参照カウンターはどのようにレイアウトされていますか?

私はC ++にかなり慣れていません。shared_ptr別の参照カウンター変数への別のポインターを保持していると考えられていました。しかし、今日、実際にはどのようにレイアウトされているのかわからないことに突然気付きました.C ++では、参照値はポインターを分離する必要はありません。

レイアウトが標準で定義されている場合、正しい予想されるレイアウトはstd::shared_ptr何ですか?