-1

私は、コンピューターのメモリ割り当ての概念を理解しようとしているプログラミングの初心者です。0x0F342 の HEX アドレスがあり、それを最小アドレスとして 1 kB のヒープを割り当てたいとします。0x0F342 に 1kB を追加するにはどうすればよいですか? HEXアドレスは正確に何を表していますか? バイト、ビット?

編集:私の質問は、HEXアドレス自体を理解しようとするだけでなく、メモリを割り当てようとしているということではありません。たとえば、0xF432 がある場合、そこから 1kB のアドレスは何ですか? 0xF432 に 1 バイトの要素がある場合、次のバイトのアドレスは何になりますか? みんな、ありがとう!

4

1 に答える 1

0

使用しているプラ​​ットフォームを教えていただければ、より適切な回答が得られます。C で回答します。これはかなり簡単ですが、この質問は Java では意味がなく、アセンブラーで説明するのははるかに難しいためです。


まあ、これは誤解の良い例です。メモリを割り当てるビジネスに従事するべきではありません。これは、ランタイム ライブラリ (C の malloc()、Java の new など) に任せるのが最善です。

彼らが返すアドレスは、似たようなものかもしれません。これはメモリ内の場所にすぎません。番地が通りから家までの場所であるように、何百万バイトも使用できるため、「123」よりも大きな表記を使用します。

このアドレスを取得するには、malloc(メモリ割り当て) のような方法を使用して、必要なメモリ量を伝えます。整数を格納したいとしましょう。これは通常 2 バイトですが、一部のプラットフォームでは 4 バイトになる場合があるため、次のように計算します。

malloc( sizeof( int));

これは次のようなアドレスを返す可能性があります0x0f342

0x0f342したがって、「アドレスに値を保存したい」と言うかもしれません4。しかし、これは面倒です。実行サイクルのさまざまな時点でアドレスが変更される可能性があるため、ポインターと呼ばれる変数を使用します。

int *myInt;
myInt = malloc( sizeof(int));
*myInt = 4;

*、「次の変数をアドレスとして扱い、割り当てられた値をそれが指すこの場所に格納する」(つまり、ポインター)と言います。これで、特定のアドレスを追跡する必要さえなくなりました!

残念ながら、C では割り当てられたメモリのサイズを (通常は) 追跡する良い方法がないため、その側面については独自の計算を行う必要があります。

于 2013-06-07T03:21:01.050 に答える