ホームページ  >  に質問  >  本文

C++ - msvc の演算子 new() とハンドルについて疑問がありますか?

リーリー

この endless loop是为了等分配成功内存然后返回指针, 不过我的操作系统知识非常不扎实(非科班), 所以想请教下大家这里的endless loop的第二个if がどのように分析されるのかを知っています (ここでのハンドルの処理など)

ありがとう

淡淡烟草味淡淡烟草味2685日前782

全員に返信(1)返信します

  • 阿神

    阿神2017-05-16 13:32:35

    _callnewh は、メモリ割り当ての失敗を処理するハンドルを呼び出します。このハンドルは、メモリの解放を試みたり、一定時間待機したり、例外を直接スローしたりすることができます。ハンドル呼び出しが _callnewh(size) != 0,那么new会再一次尝试申请,如果调用失败_callnewh(size) == 0 を正常に返すと、関連する例外がスローされます。

    if (size == SIZE_MAX)说明申请的对象数太多(size_t理论上能表达任何对象的数量)。elseこれは一般的なアプリケーションの失敗です。 std_bad_array_new_length および std_bad_alloc は、標準ライブラリ内の対応する例外を参照します。

    関連インターフェース: _set_new_handler

    返事
    0
  • キャンセル返事