C ++
 Computer >> コンピューター >  >> プログラミング >> C ++

構造体のsizeofが、C / C ++の各メンバーのsizeofの合計と等しくないのはなぜですか?


構造体のsizeofとその構造体の各メンバーのsizeofの合計の違いは、バイトのパディングと配置によるものです。 C / C ++のすべてのデータ型には、アライメント要件があります。プロセッサは、そのアーキテクチャの処理ワード長を持ちます。 32ビットマシンでは、処理ワードサイズは4バイトまたは32ビットになります。たとえば、構造体がある場合-

#include <iostream>
using namespace std;
struct X
{
   char b[3];
   int c;
};
int main()
{
   char b[3];
   int c;
   int total = sizeof(b) + sizeof(c);
   cout << sizeof(X) << endl;
   cout << total;
}
出力 これにより出力が得られます-

8
7

私の64ビットマシンで。どうしてこれなの?これは、構造体でchar配列を取得してメモリに配置するためですが、サイズが4バイトのintをその隣に配置すると、配置の規則が無効になります。したがって、bの終わりの余分なバイトはスキップされ、cは4バイトの境界から始まります。これにより、余分なサイズが発生します。

これらのルールの詳細については、 https://en.wikipedia.org/wiki/をご覧ください。 Data_structure_alignment。


  1. n番目のフィボナッチ数のC/C ++プログラム?

    フィボナッチ数列は、次の項が前の2つの項の合計であるシリーズです。フィボナッチ数列の最初の2つの項は、0の後に1が続きます。 この問題では、フィボナッチ数列のn番目の数が見つかります。このために、すべての数値を計算し、n個の項を出力します。 Input:8 Output:0 1 1 2 3 5 8 13 説明 0+1=1 1+1=2 1+2=3 2+3=5 Forループを使用して、次の用語の前の2つの用語を合計する 例 #include<iostream> using namespace std; int main() {    int t1=0,t2=1,

  2. 三角マッチ棒番号のC/C ++プログラム?

    マッチ棒を使用して作成された三角形は、正三角形を作成するように配置されます。これは、三角形のマッチ棒番号と呼ばれます。三角形のマッチ棒の数は、マッチ棒を三角形にするために必要なマッチ棒の数です。 この問題では、数はマッチ棒のピラミッドXの床であり、私たちのタスクは、x階のマッチ棒のピラミッドを形成するために必要なマッチ棒の最小総数を印刷するプログラムを作成することです。 概念をより明確にする例を見てみましょう。 Input: 7 Output: 84 説明 これは三角数の拡張です。整数Xの場合、必要なマッチ棒はX番目の三角数の3倍、つまり(3 * X *(X + 1))/ 2になります。