2

私はこのCプログラムを持っています。

#include<stdio.h>

char arr[65];
int main()
{
    return 0;
}

次のコマンドでgcconでコンパイルすると:linux

gcc -Wall -save-temps arrNewGlobal.c -o arnewGlobal

次のアセンブリコードを取得します。

.file   "arrglobal.c"
.comm   arr,65,32 
.text
.globl  main
.type   main, @function
    .......... 

ドキュメントによるasと、.comm はサイズ 65 の初期化されていないメモリ ブロックを 32 ビットの位置合わせで割り当てました (つまり、アドレスの最下位 5 桁がゼロになります)。

私が理解していないのは、このアドレスがこのメモリブロックの開始アドレスを意味するのか、またはこのメモリの各バイトがゼロに等しい最下位5ビットのアドレスを持つ必要があるのか​​ ということです(各バイトアドレスがジャンプするように)

また、念のために言っておきますが、このアドレスは物理アドレスではなく、仮想アドレスですか?

4

2 に答える 2

1

.com 名、サイズ、配置

' .comm ' ディレクティブは、データ セクションにストレージを割り当てます。ストレージは、識別子nameによって参照されます。 サイズはバイト単位で測定され、正の整数である必要があります。名前は事前定義できません。 アライメントはオプションです。整列が指定されている場合、名前のアドレスは整列の倍数に整列されます。

はい、アドレスは仮想アドレスです。ページング メカニズムは、他の場合と同様に物理アドレスへのマッピングを処理します。

于 2015-12-30T21:42:13.227 に答える
0

そのコードは、65 バイトが 32 バイト/ビット (4 バイト) にアラインされていることを意味します (正直なところわかりません) が、すべてのバイトが 5 ls ビットがクリアされたアドレスにある必要があることを意味するわけではありません。想像してみてください-この配列は配列ではありません-メモリ内で連続していません。「物理」アドレスと「仮想」アドレスとはどういう意味ですか?

于 2012-10-15T11:53:37.527 に答える