何かをスタックに複数回 (たとえばループで) プッシュした場合、スタックは増え続けますか、それとも以前の値は置き換えられますか? たとえば、プッシュ EDI を 5 回繰り返します。スタックには 5 つの EDI がありますか?
3 に答える
2
スタックは、OS で定義された制限に達するまで増加し続けます。その後、例外がスローされます。この制限は、再帰を可能にするために、PC では通常 256k またはメガバイトです。
スタックは型を保持しないため、EDI は 32 ビット レジスタであるため、edi を 5 回プッシュすると、EDI の値と同じ 5 つの 32 ビット値が含まれます。
于 2010-01-25T13:53:09.850 に答える
2
スタックは成長し続けますか
はい。それが「スタック」と呼ばれる理由です。これは、再帰呼び出し (サブルーチンが異なるパラメーターでそれ自体を呼び出す場合) を許可するため、非常に基本的なプロパティです。
于 2010-01-25T13:56:05.923 に答える
1
何も成長しません。スタック ポインター レジスターは、何かをプッシュするたびに単純にインクリメント (または CPU アーキテクチャによってはデクリメント) されるため、新しいが既存のメモリ位置を指します。
これはしばしばスタックの「成長」と呼ばれますが、実際には C で言うのと同じです:
int stack[100];
int sp = 0;
stack[sp++] = 42; // push
上記の配列と同様に、CPU スタックは固定サイズであり、使い果たされると何らかのエラーが発生します (これもアーキテクチャに依存します)。
于 2010-01-25T13:55:25.977 に答える