バスエラー(Bus error)と位置決め処理の問題について教えてください.
プログラムを作成して実行するとき、「Bus error(core dumped);.このような情報が発生した場合、SPARCなどのRISCタイプのCPUで「位置決め違反アクセス」が発生したことを示す.例えば、読者は次のプログラムを読むことができる.#include#include void main(){char buf[256];int*x;x=(int*)&buf[1];*x=68000;printf("*x=%d",*x);}このプログラムでは、256 byteのメモリ領域を確保することができ、68000の整数値を記憶することができる.しかし、前述のアドレスの問題も発生する.上記の場合、配列bufの記憶領域は4の整数倍から始まる.この配列の2番目の位置(すなわち奇数アドレスユニット)には、データ型intの値が付与.RISCタイプのCPUでは、データ型intの値を4の整数倍アドレスに記憶することができない.したがって、変数xに68000を付与際にCPUがこのプログラムを実行することができない場合には、Bus errorという情報が出て、そのプログラムの実行を終了する.しかし、Pentinm(Pentium)シリーズのCPUでは、Bus errorという情報は生成する.これは、Pentinmシリーズの80386のフローを採用するRISCタイプのCPUが、CPUの処理効率を向上させたり、回路を簡易化処理したりして、8ビットから移植性を重視するアーキテクチャを用いるためである.上記の中で、私はよく見えません.高人に詳しく解説してもらいます.その中で最も理解できないのは:1.「配列bufの記憶領域は4の整数倍から始まる」のはなぜですか?2.「RISCタイプのCPUでデータ型int値を4の整数倍アドレスに格納できない」のはなぜですか?3. "x = (int *) & buf[1];", この文は強制変換だと知っていますが、charタイプの&buf[1]は8 bitしかないのではないでしょうか.32 bitのxに変換するにはどうすればいいのでしょうか???4. "x = (int *) & buf[1];", この文はいったいどうやって実現したのですか.それともどうやって理解すればいいの??ひきあげる
lcy7618291
|
閲覧数8304回
2016-09-20 16:31:19におすすめ
#砂漠探検-問題に答えて礼を連発する
ベストアンサー
lcy7618291
|
閲覧数8304回
2016-09-20 16:31:19におすすめ
#砂漠探検-問題に答えて礼を連発する
ベストアンサー
1 SPARC RISC CPU ,int 4 ,char buf[256]s char , 256 (4 ), 4 , 4 , 0x1000;
2。 , “ RISC CPU , int 4 ”
3 char , , ,char、int 、float、double
4 buf 0x1000, 0x1001~0x1004 x(x int ), ,int 4 , 0x1001 , CPU