メモリの区分

プログラム(機械語)おかれる場所。
半固定データ。
関数作業領域(スタック領域)

置かれる場所

プログラム(機械語)おかれる場所と半固定データはオフセット値の低い場所からおかれる
スタック領域は高位番地から置かれる

インストラクションポインタ

プログラム(機械語)の実行中の位置を示す。IPはCPUにある。

スタックポインタ

ある関数から、関数呼び出すと、スタック領域に高位のアドレスから 下位のアドレスに呼び出された関数の作業領域が積まれていく。
スタックポインタは作業領域の終端を示す。 スタックポイントより低位は未使用領域。
スタックポインタはCPUが保持している。
呼び出された関数から呼び出し元の関数へ処理が戻ると、 SPが呼び出し元の関数へ移行し、 呼び出された関数のスタック領域は開放される。

Stack Overflow

スタック領域オーバーフロー

#include 
int main() {
	int i;
	i = 0;
	/* ポインタの表示 */
	printf( "\nアドレスは:\t%p\n", &i);
	main();
	return 0;
}
アドレスは:     00033A7C

アドレスは:     00033A24

アドレスは:     000339CC

アドレスは:     00033974

アドレスは:     0003391C

アドレスは:     000338C4

アドレスは:     0003386C

アドレスは:     00033814

アドレスは:     000337BC

アドレスは:     00033764

アドレスは:     0003370C

アドレスは:     000336B4
参考文献

C言語入門
ISBN4-7916-0830-5