メモリ管理のset_new_handler()

1052 ワード

mallocを使用する場合、通常、オープン完了はポインタが空であるかどうかを判断し、オープンメモリの成功を保証します.
しかしnewを使用する場合は判断が少なく、newで非常に大きな空間を開けようとすると、実行時に直接クラッシュし、処理メモリがうまく開かない処理関数が必要になります.
#include 
using namespace std;

void out_of_memory()
{
	cout << "out of memory!" << endl;
}

void main()
{
	set_new_handler(out_of_memory);
	int *p = new int[536870911];
	cout << "ok!" << endl;
}

1.   set_new_handler関数の役割はnew_を設定することですpが指す関数はnew操作またはnew[]操作に失敗したときに呼び出される処理関数である.
2.設定した処理関数は、より多くの空間を割り当て可能な状態にしようとすることができ、新しいnew操作が成功する可能性があります.関数がより多くの空き領域を取得することに成功した場合にのみ返されます.そうでないとbad_が投げ出されますalloc異常(またはその異常を継承するサブクラス)またはabortまたはexitの呼び出しなどのプログラムの終了.
3.設定された処理関数が戻った場合(例えば、この関数がより多くの空き領域を取得することに成功した場合)、メモリの割り当てが成功するまで繰り返し呼び出されるか、戻ってこないか、他の関数に置き換えられる可能性があります.処理関数にexit(1)を追加すると、実行が終了します.
4.未使用set_new_handlerが処理関数を設定したり、設定した処理関数が空の場合、メモリ割り当てに失敗したときにbad_を放出するデフォルトの処理関数が呼び出されます.alloc異常.
私に感じさせるnew_handler()はLinuxの登録関数に似ていて、先に登録して、ある特定の状況が発生したときに呼び出されます.
set_new_handlerの原理は戻り値があると書くのがおっくうだ.