ページ 11

構造体

Posted: 2007年7月02日(月) 14:27
by りょう
 このプログラムの誤っている箇所を修正し、説明する。
また、このプログラムを実行させた場合、駄々しく動作しない。
どうような結果になることが予想されるか記述する。

#include<stdlib.h>

typedef struct{
char m_ch;
int m_n;
}MyType;

void main(void)
{
MyType *p=(MyType *)malloc(sizeof(char) + sizeof(int));
if(p){
p->m_ch = 'a';
p->m_n = 100;
free(p);
}
}

ここでの誤りは、
     MyType *p=(MyType *)malloc(sizeof(char) + sizeof(int));
                 ↓
     MyType *p=(MyType *)malloc(sizeof(MyType));
となるのはわかります。
 しかし、説明となるとまとめることができません。
nバイトアライメントやパディングなどをどういう風に使えばいいんでしょうか?

Re:構造体

Posted: 2007年7月02日(月) 16:07
by なぎ
まずは、「nバイトアライメント」と「パディング」の定義を書いてみるのが吉かなとも思います。
多分、それからでしょう。

Re:構造体

Posted: 2007年7月03日(火) 09:37
by toyo
構造体のメンバ変数は同じサイズ(nバイト)に揃えた(アライメント)方が扱いやすいと言うことです。

Re:構造体

Posted: 2007年7月03日(火) 15:55
by keichan
#本件とは全く関係ありませんが

アライメント されていないとデータを(正常に)取得できない処理系も存在する。
と聞いたことがあります。

Re:構造体

Posted: 2007年7月03日(火) 23:16
by なぎ
> アライメント されていないとデータを(正常に)取得できない処理系も存在する。

古い話ですが、モトローラの MC68000 は、16bit のデータが整数アライメント(偶数番地境界)にないと、バスエラーでこけていました。
これはもう、プロセッサレベルのお話です。