0

私はミシガン大学でコンピューター アーキテクチャのオファーを独学しています。d のメモリ レイアウトが 308 http://www.flickr.com/photos/45412920@N03/4442695706/ ではなく 312 から 319 で始まる理由がわかりません。( http://www.flickr.com/photos/45412920@N03/4442695706/ )指定された黄金律を理解していなかったのかもしれませんhttp://www.flickr.com/photos/45412920@N03/4441916461/sizes/l /こちら( http://www.flickr.com/photos/45412920@N03/4441916461/sizes/l/ ) そうですね。

4

2 に答える 2

1

2 番目のリンクは、MIPS が変数をパックできないことを示しています。したがって、それらが占めるアドレスはワード境界に収まる必要があります。

short がハーフワードでアラインされている場合は 2 バイト、int はワードでアラインされているため 4 バイト、double はダブルワードでアラインされている必要があるため 8 バイトを使用します。

これらの場所で整列するために..

最下位ビット (LSB) のゼロは、1 つおきまたは 2 バイトごと (ハーフ ワードで整列) を示し、2 つのゼロは 4 バイトごとを示し、3 つのゼロは 8 バイトごとを示します。

Address (4 LSBs)
    XXX0 - half word aligned (2 bytes)
    XX00 - Word aligned (4 bytes)
    X000 - Double word aligned (8 bytes)

double はダブル ワード アラインメントである必要があるため、308 (100110100) で開始することはできません。これは、ワード アラインメントのみ (2 LSB = 0) であるためです。次のダブル ワード アラインメント 312 (100111000) で開始する必要があります。

[Addr]   [Binary]    [Alignment]  
300      100101100   Word, Half-Word
301      100101101
302      100101110   Half-Word
303      100101111   
304      100110000   Double-Word, Word, Half-Word
305      100110001
306      100110010   Half-Word
307      100110011 
308      100110100   Word, Half-Word
309      100110101   
310      100110110   Half-Word
311      100110111  
312      100111000   Double-Word, Word, Half-Word
于 2010-03-18T05:50:53.880 に答える
0

MIPS でのメモリ アクセスはワード アラインされます。つまり、一度に 32 ビット/4 バイトのメモリを読み取ります。変数 "b" は 1 バイトなので、実際にはアドレス 300 ~ 303 を読み取ります。変数 "c" が 301 から始まる場合、プロセッサは "b" が 1 バイトにすぎないことを認識し、他のバイトをゼロにして、場合によってはそれを LSB 位置にシフトする必要があります (または、コンパイラがそうする必要があります)。いずれにせよ、4 バイト境界 (4 の倍数) ですべてのメモリ アクセスを停止する方が効率的です。

詳細については、データ構造のアライメントを参照してください。

于 2010-03-18T06:00:07.297 に答える