私はスタックに関するいくつかの質問があります。スタックはCPUまたはRAMにありますか?
- スタックはCPUまたはRAMにありますか?
- スタックはOPcodeを実行する場所ですか?
- CPUまたはRAMのEIPですか?
私はスタックに関するいくつかの質問があります。スタックはCPUまたはRAMにありますか?
スタックは常にRAMにあります。 CPUのレジスタに保持されているスタックポインタは、スタックの先頭、すなわちスタックの先頭の位置のアドレスを指し示している。
スタックはCPU内ではなくRAM内にあります。セグメントは、以下の図に見られるようにスタックに専用される:Wikiから
:
スタック領域は、典型的には 高くに位置するプログラムスタック、LIFO構造を含んでメモリの一部。
どのCPUについて話していますか?
一部ががコールスタックのためを使用しているメモリが含まれている場合があり、一部はは、コールスタックのためを使用することができることを、メモリが含まれているが、コールスタックの管理コードを実装するためにOSを必要とし、他はまったく書き込み可能なメモリを含んでいません。たとえば、x86アーキテクチャでは、CPUに1つ以上のcode caches and data cachesが組み込まれている傾向があります。
一部のCPUまたはOSは、メモリの特定の領域を実行不能にする操作を実装しています。たとえば、スタックベースのバッファオーバーフローを防ぐために、多くのOSはhardware and/or software-based data execution preventionを使用します。これにより、スタックメモリがコードとして実行されるのを防ぐことができます。 はありません;呼び出し元のコードと実行するコードの両方を格納するために、x86 CPUのデータキャッシュラインを使用することは、のメモリより高速である可能性があります。
EIPは、IA32 CPUアーキテクチャ用のレジスタのようです。 IA-32を参照している場合は、CPU操作ですが、多くのOSがマルチタスクをエミュレートするためにRAMに/から切り替えます。
+1 CPUからスタックへのレジスタ –