構造体は単純にメモリの圧縮された部分です。例、32ビットアーキテクチャのint a; int b;
は、8バイト構造(2 x 4バイト)になります。
割り付けられていない構造体(例えば9バイト)が割り当てられますが、割り当てられたメモリ領域は(12バイト、sub $esp, 12
)配置されます。
あなたはコンパイラが異なった反応をすることを見ることができ、そしてそれらの割り当てがconst
ディレクティブを使用することによって、特に異なること:あなたが試す
typedef struct __foobar {
int a;
int b;
} *pfoobar_t, foobar_t;
:
は、以下の構造を考えると
#include <stdio.h>
int main(){
foobar_t var;
const pfoobar_t my_var = &var;
my_var->a = 3;
printf("%d\n", my_var->a);
}
コンパイルして問題なく実行します。それはコンパイルされません
#include <stdio.h>
int main(){
foobar_t var;
const foobar_t *my_var;
my_var->a = 3;
printf("%d\n", my_var->a);
}
:今のコードを変更する
const.c: In function ‘main’:
const.c:13:3: error: assignment of member ‘a’ in read-only object
my_var->a = 3;
静的オブジェクトは、バイナリの専用部分に格納されているので、あなたの異なった宣言はELF形式の形状を変更します。
相違点を説明する2つの完全な例を提供できますか? –