短い符号なし整数のみからなる構造体があれば、同じサイズの連続したメモリ位置に格納されます。短い符号なし整数の配列がある場合も同じことが適用されます。彼らはどのように違うでしょうか?彼らはどのようにアクセスされていますか?私は、配列演算子がそのメモリ位置からオフセットを設定している間、配列の開始値を参照するポインタを使って配列にアクセスすることを知っています。構造体に同じことが適用されるか、各部分のメモリ位置を使って構造体にアクセスされますのデータですか?同じデータ型の構造体と配列の違いは何ですか?
1
A
答えて
2
いいえ、それらは同じである必要はなく、おそらくそうではありません。
構造体メンバーの場合、メンバー間にパディングが存在する可能性があります。したがって、連続するメンバーが連続したメモリに常駐することは保証されません。この場合、実装に基づいて、最初の要素のアドレスを使用するポインタ演算は、の作業が有効であるかどうかは関係ありません。構造物内の無名 パディングがあるかもしれませんC11
標準、章§6.7.2.1/ P15、構造体と共用体指定子の関連部分、
を引用
[..]ではなく、その先頭に。
と
章§6.5.3.4、sizeof
オペレータ、
[...] は構造体または共用タイプを有するオペランドに適用した場合、結果は総数でありますこのようなオブジェクト内の内部および末尾のパディングを含む バイトです。
ただし、配列の場合、すべてのメンバーは連続したメモリに常駐することが保証されており、ポインタ演算は確定的です。
+0
"*いいえ、彼らは同じである必要はありません。" - 同意した "*そしておそらく、彼らは*"そうではありません。メンバーがすべて同じ型の構造体は、それらを連続して割り当てる可能性が非常に高いでしょう。しかし、コンパイラがそのメンバよりも構造上のより厳密なアライメントを行うことを決定した場合、最終的にはパディングが存在する可能性があります。 –
関連する問題
- 1. CvCapture構造体とVideoCapture構造体の違いは何ですか?
- 2. 構造体の配列と構造体へのポインタの配列の賛否両論は何ですか?
- 3. 以下の構造体は同じ型ですか?
- 4. PythonバージョンのMATLAB構造体配列とは何ですか?
- 5. MEMORY_BASIC_INFORMATION構造体のBaseAddressとAllocationBaseの違いは何ですか?
- 6. XamDataGrid同じデータ型の階層構造
- 7. データ構造としてPHPの配列型の特性は何ですか?
- 8. enum構造体とenumクラスの違いは何ですか?
- 9. データ配列と同じデータ配列領域へのポインタを含む構造体を定義します。
- 10. 構造体の配列 - 構造体?
- 11. C#データの局所性:構造体の配列の参照型
- 12. 構造体の名前のデータ型は何か
- 13. カスタムデータ型(構造体)vs配列
- 14. C#で使用するためのC++データ構造体/型(構造体、列挙型)を公開するには?
- 15. C構造体と配列
- 16. JNA、構造体と配列
- 17. 構造体とシンボル配列
- 18. ColdFusion配列と構造体
- 19. 構造体の配列内で構造体の配列をソートする
- 20. 静的列挙型と静的構造体の相違点
- 21. 表とカテゴリ配列、およびセル配列と構造配列の違いは何ですか?
- 22. 構造体または配列構造の配列パフォーマンス
- 23. 列挙型と構造体のコール
- 24. 私の構造体型で配列を作る方法は?
- 25. C++ 2D構造体配列データ
- 26. C:構造体または配列の方が速いのは何ですか?
- 27. MATLAB構造体配列は
- 28. 同じ引数型の構造体の関数ポインタ
- 29. 構造体の配列の配列
- 30. は、構造体のchar型の配列を初期化しようとしているが、私はこのような構造体持っている何か
違いは、(プリプロセッサの特定の命令を与えることなく)構造体に追加されてもされないかもしれないパディングを制御しないことです。配列は 'shorts'の* x-number *だけであり、' struct'は追加されたすべてのパディングを加えたものです。 –
'struct'は関数から渡されたり返されたりすることができます。配列はできません。 – chux
私は、パディングなしで一連の連続したメモリ位置を関数から渡したいと仮定しましたが、何をする必要がありますか? –