問題タブ [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.

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

c++ - sizeof(struct) C++ での奇妙な出力

誰かがこのコードの出力を説明してもらえますか?

出力: 1 4 8

ストラクチャー8のサイズは?

0 投票する
5 に答える
1076 参照

c++ - 標準に準拠した方法で、配列と同じ型のメンバーを持つ構造体を再解釈します

さまざまな 3D 数学コードベースで、次のようなものに遭遇することがあります。

これは、実装が同じタイプであってもメンバー間にパディングを誤って追加することが許可されているため、違法です。ただし、実際にはそうするものはありません。

sを介して制約を課すことにより、これを合法にすることはできますstatic_assertか?

static_assertつまり、トリガーされていないということは、実行時に期待されることを意味しoperator[]、UB を呼び出さないことを意味しますか?

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

c - C プログラミングの pragmapack() には、構造パッキング以外の用途がありますか?

私がインタビューを受けている間、インタビュアーは私に、構造パッキング以外に C で pragmapack() を使用する方法はありますか? と尋ねました。なので、構造パッキング以外はわからないと答えました。それで、それの他の使用法はありますか?

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

c++ - 異種頂点データ配列を作成するポータブルな方法

グラフィックス プログラミングでは、頂点フォーマットを扱うことは非常に一般的です。これについては、たとえばここで説明されています。

ただし、未定義の動作を呼び出さない方法を探しています (主に C++ の情報を探していますが、C も問題ありません)。

一般的な方法は次のとおりです。まず、頂点フォーマットを構造体として宣言します。

次に、これらの配列を作成して入力し、グラフィック API (例: OpenGL) に送信します。

(余談ですが、API に形式を伝える部分はスキップしました。API が認識していると仮定します)。

ただし、グラフィックス API には構造体に関する知識がありません。次のような、メモリ内の一連の値が必要なだけです。

また、パッキングとアラインメントの問題によりmyVerts、メモリ内でそのようにレイアウトされる保証はありません。

もちろん、多くのコードがこのように書かれており、移植性はありませんが動作します。

しかし、これを行うためのポータブルな方法はあります

?

これは基本的にシリアル化の問題です。参照: buffer を構造体として解釈するための、移植可能な正しい方法

私が知っている主な標準準拠の方法は、メモリを として割り当てることchar[]です。次に、すべてのバイトを希望どおりに配置するだけです。

しかし、struct Vertex上記の表現からその表現に変換char[]するには、追加のコピーが必要になります (そして、バイトごとの遅いコピーが必要になります)。それでは非効率です。

別の方法として、表現にデータを直接書き込むこともできますがchar[]、これは非常に厄介です。verts[5].x = 3.0fバイト配列にアドレス指定したり、float を 4 バイトとして書き込んだりするよりも、言う方がずっといいです。

これを行うための優れたポータブルな方法はありますか?