問題タブ [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 - C の構造体のサイズ
次の C コードを検討してください。
出力は次のとおりです。
4 30 36
構造体のサイズが個々のコンポーネント変数のサイズの合計と等しくないのはなぜですか?
c++ - C++ 構造体のサイズ: 2+4+2+2+4 = 16
sizeof();
この構造体の が 16 バイトなのはなぜですか? 私はg ++でコンパイルしています。
c++ - char、double、int、およびatを含む構造のサイズ
コードフラグメントのみを実行すると
次のような結果が得られます。
合計:17。
しかし、これらのデータ型を含むsizeof structをテストすると、24が得られ、混乱します。追加の7バイトは何ですか?
これはコードです
:編集
このようにコードを更新しました
そして今それは私に16バイトを示しています。それは良いですか、それとも私はいくつかの重要なバイトを失いましたか?
c++ - C 構造体のメモリ アラインメント
私は 32 ビット マシンで作業しているので、メモリ アラインメントは 4 バイトである必要があると思います。私はこの構造体を持っているとしましょう:
単純な追加サイズは 6 バイトで、アラインされたサイズは 8 である必要があると思いますが、sizeof(myStruct)
6 が返されます。
ただし、次のように書くと:
単純な追加サイズは 10 バイト、整列サイズは 12 で、今回はsizeof(myStruct) == 12
.
誰かが違いを説明できますか?
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 バイトはどこから来るのでしょうか?
ありがとう!
c - Sizeof 演算子が間違ったサイズを返しますか?
重複の可能性:
構造体の sizeof が各メンバーの sizeof の合計と等しくないのはなぜですか?
構造体のメンバーを uint32_t として宣言するときの余分なバイト
何らかの理由で、sizeof
演算子はこの構造体に対して偽のサイズを返します (48
ではなく40
):
だからここに簡単なテストがあります:
どちらが印刷されますか:
1 2 4 8:48
これはどのように起こりますか?すべてのサイズを合計すると40
、 ではなくになり48
ます。は一体どこ48
から来るのでしょうか?
そして、それが奇妙なx86-64
特典である場合、構造体のすべてのフィールドが占有したい量を確実に占有するようにするにはどうすればよいですか (この構造体に大量のバイトをキャストしています)。
c++ - ビット フィールドを含む構造体のサイズ
ビットフィールドの概念を理解しようとしていました。しかし、CASE III の次の構造体のサイズが 8 バイトになる理由がわかりません。
ケース I:
sizeof(b); // 出力: 1 (私のシステムでは unsigned char が 1 バイトを占めるため)
ケース II:
ケース III:
ケース III の出力が 8 になる理由がわかりません。1(char) + 4(unsigned) = 5 と予想していました。
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 をいつ使用する必要がありますか?