問題タブ [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 投票する
4 に答える
226188 参照

c - C の構造体のサイズ

重複の可能性:
構造体の sizeof が各メンバーの sizeof の合計と等しくないのはなぜですか?

次の C コードを検討してください。

出力は次のとおりです。

4 30 36

構造体のサイズが個々のコンポーネント変数のサイズの合計と等しくないのはなぜですか?

0 投票する
9 に答える
1090 参照

c++ - C++ 構造体のサイズ: 2+4+2+2+4 = 16

重複の可能性:
構造体の sizeof が各メンバーの sizeof の合計と等しくないのはなぜですか?

sizeof();この構造体の が 16 バイトなのはなぜですか? 私はg ++でコンパイルしています。

0 投票する
9 に答える
9972 参照

c++ - char、double、int、およびatを含む構造のサイズ

コードフラグメントのみを実行すると

次のような結果が得られます。

合計:17。

しかし、これらのデータ型を含むsizeof structをテストすると、24が得られ、混乱します。追加の7バイトは何ですか?

これはコードです

:編集

このようにコードを更新しました

そして今それは私に16バイトを示しています。それは良いですか、それとも私はいくつかの重要なバイトを失いましたか?

0 投票する
10 に答える
45003 参照

c++ - C 構造体のメモリ アラインメント

私は 32 ビット マシンで作業しているので、メモリ アラインメントは 4 バイトである必要があると思います。私はこの構造体を持っているとしましょう:

単純な追加サイズは 6 バイトで、アラインされたサイズは 8 である必要があると思いますが、sizeof(myStruct)6 が返されます。

ただし、次のように書くと:

単純な追加サイズは 10 バイト、整列サイズは 12 で、今回はsizeof(myStruct) == 12.

誰かが違いを説明できますか?

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

c++ - 構造体のメンバーを uint32_t として宣言するときの余分なバイト

stdint.h ライブラリの uint32_t タイプを使用すると問題が発生します。次のコードを実行すると (Ubuntu Linux 11.10 x86_64、g++ バージョン 4.6.1):

次に、次の出力が得られます。

私がしているのは、構造体の合計サイズと構造体の各メンバーのサイズを出力することです。

xbee_tx_b の場合、メンバーのサイズは構造体のサイズに加算されます (14)

xbee_tx_a の場合、メンバーのサイズは最大 18 バイトになりますが、構造体のサイズは 20 バイトです!

xbee_tx_a と xbee_tx_b の唯一の違いは、dest_addr_64_X メンバーのタイプです。xbee_tx_a の uint32_t と xbee_tx_b の uint16_t です。uint32_t を使用すると、構造体のサイズがメンバーのサイズの合計よりも大きくなるのはなぜですか? これらの余分な 2 バイトはどこから来るのでしょうか?

ありがとう!

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

c - Sizeof 演算子が間違ったサイズを返しますか?

重複の可能性:
構造体の sizeof が各メンバーの sizeof の合計と等しくないのはなぜですか?
構造体のメンバーを uint32_t として宣言するときの余分なバイト

何らかの理由で、sizeof演算子はこの構造体に対して偽のサイズを返します (48ではなく40):

だからここに簡単なテストがあります:

どちらが印刷されますか:

1 2 4 8:48

これはどのように起こりますか?すべてのサイズを合計すると40、 ではなくになり48ます。は一体どこ48から来るのでしょうか?

そして、それが奇妙なx86-64特典である場合、構造体のすべてのフィールドが占有したい量を確実に占有するようにするにはどうすればよいですか (この構造体に大量のバイトをキャストしています)。

0 投票する
6 に答える
11448 参照

c++ - ビット フィールドを含む構造体のサイズ

重複の可能性:
構造体の sizeof が各メンバーの sizeof の合計と等しくないのはなぜですか?

ビットフィールドの概念を理解しようとしていました。しかし、CASE III の次の構造体のサイズが 8 バイトになる理由がわかりません。

ケース I:

sizeof(b); // 出力: 1 (私のシステムでは unsigned char が 1 バイトを占めるため)

ケース II:

ケース III:

ケース III の出力が 8 になる理由がわかりません。1(char) + 4(unsigned) = 5 と予想していました。

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

opengl - 1 バイト アラインメントと 4 バイト アラインメント (ピクセル パッキング)

OpenGL 3.x の OpenGL SuperBible を読んでいます。「ピクセル パッキングの概念」全体を理解するのに苦労しています。通常、199px 幅の画像には 597 バイトが必要になることがわかります [(199 * 3)3 各カラー チャネル RGB に]。私の最初の質問は、なぜこれが正しい場合があるのか​​ということです。著者は、これは 4 バイトのアラインメント システムでのみ機能すると述べています。彼は続けて、4 で簡単に割り切れるように 3 バイトが追加されると言っていますが、これもわかりません。だから本当に私の質問は、4バイトのアライメントの重要性は何ですか?それは実際にはどういう意味ですか?? 著者は、代替案は 1 バイト アラインメントであると述べていますが、これも理解できません。

著者は、.TGA は 1 バイト アラインまたは「タイト」であり、.bmp は 4 バイト アラインであると述べています。

4 バイト アラインメント、1 バイト アラインメントとは何ですか? また、どちらか一方を使用する必要があるのはなぜですか? テクスチャリングに .tga または .bmp をいつ使用する必要がありますか?