問題タブ [structure-packing]
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.
c++ - sizeof(struct) C++ での奇妙な出力
誰かがこのコードの出力を説明してもらえますか?
出力: 1 4 8
ストラクチャー8のサイズは?
c++ - 標準に準拠した方法で、配列と同じ型のメンバーを持つ構造体を再解釈します
さまざまな 3D 数学コードベースで、次のようなものに遭遇することがあります。
これは、実装が同じタイプであってもメンバー間にパディングを誤って追加することが許可されているため、違法です。ただし、実際にはそうするものはありません。
sを介して制約を課すことにより、これを合法にすることはできますstatic_assert
か?
static_assert
つまり、トリガーされていないということは、実行時に期待されることを意味しoperator[]
、UB を呼び出さないことを意味しますか?
c - C プログラミングの pragmapack() には、構造パッキング以外の用途がありますか?
私がインタビューを受けている間、インタビュアーは私に、構造パッキング以外に C で pragmapack() を使用する方法はありますか? と尋ねました。なので、構造パッキング以外はわからないと答えました。それで、それの他の使用法はありますか?
c++ - 異種頂点データ配列を作成するポータブルな方法
グラフィックス プログラミングでは、頂点フォーマットを扱うことは非常に一般的です。これについては、たとえばここで説明されています。
ただし、未定義の動作を呼び出さない方法を探しています (主に C++ の情報を探していますが、C も問題ありません)。
一般的な方法は次のとおりです。まず、頂点フォーマットを構造体として宣言します。
次に、これらの配列を作成して入力し、グラフィック API (例: OpenGL) に送信します。
(余談ですが、API に形式を伝える部分はスキップしました。API が認識していると仮定します)。
ただし、グラフィックス API には構造体に関する知識がありません。次のような、メモリ内の一連の値が必要なだけです。
また、パッキングとアラインメントの問題によりmyVerts
、メモリ内でそのようにレイアウトされる保証はありません。
もちろん、多くのコードがこのように書かれており、移植性はありませんが動作します。
しかし、これを行うためのポータブルな方法はありますか
?
これは基本的にシリアル化の問題です。参照: buffer を構造体として解釈するための、移植可能な正しい方法
私が知っている主な標準準拠の方法は、メモリを として割り当てることchar[]
です。次に、すべてのバイトを希望どおりに配置するだけです。
しかし、struct Vertex
上記の表現からその表現に変換char[]
するには、追加のコピーが必要になります (そして、バイトごとの遅いコピーが必要になります)。それでは非効率です。
別の方法として、表現にデータを直接書き込むこともできますがchar[]
、これは非常に厄介です。verts[5].x = 3.0f
バイト配列にアドレス指定したり、float を 4 バイトとして書き込んだりするよりも、言う方がずっといいです。
これを行うための優れたポータブルな方法はありますか?