プロセスが終了すると、スタック上のメモリが漏洩したメモリを含む、プロセスのすべてのメモリが解放されます.

1231 ワード

1、プロセスが終了すると、プロセスのすべてのメモリが解放され、スタック上のメモリが漏洩したメモリが含まれます.なぜなら、プロセスが終了すると、GDT、LDT、ページディレクトリはオペレーティングシステムによって変更され、論理メモリはすべて消失し、物理メモリの内容はまだ存在する可能性があるが、論理メモリはLDTとGDTから削除され、ページディレクトリテーブルはすべて破棄されるため、メモリはすべて回収されるからである.
2、ユーザープログラムがどのようにmallocであるかにかかわらず、プロセスが終了すると、その仮想アドレス空間は直接破棄され、オペレーティングシステムはプロセスが終了するとメモリ管理モジュールにページングファイルの中でこのプロセスに関連する記録をすべて削除させ、「利用可能な空間」とマークすれば、すべての申請のメモリを一度に回収することができ、まったく面倒ではない.簡単に言えば、mallocの割り当てはすべて偽物で、mallocの要求システムはすべて知っていて、プログラムが終了する時、システムはmallocのすべての資源を回収します.しかし、一部のメモリシステムでは回収できません.たとえば、カーネルレベルで動作するドライブによるメモリエラーなどは、システムでは管理できません.このエラーは、プログラムを再起動しても効果がありません.解決するには、コンピュータを再起動する必要があります.
例:
#include   
 const static int const_once = 1024 * 1024 * 10;
int main()
{
	int *a;
	for (int cnt = 0; cnt <= 10; cnt++)
	{
		a = new int[const_once];
		a[10] = 1;
		a[const_once - 10] = 1;
	}

	//system("pause");
	//exit(0);

	while (1)
	{
		switch (getchar())
		{
		case '1':   //      1
			break;
		case '2':
			break;
		case '3':
			break;
		case '4':
			break;
		case '
': // exit(0); default: printf(" !"); getchar(); } } return 0; }

Windowsタスクマネージャを使用して、メモリの変化を確認します.