>  Q&A  >  본문

c++ - msvc의 new() 연산자와 핸들에 대해 몇 가지 의구심이 있습니까?

으아악

저는 이것이 endless loop是为了等分配成功内存然后返回指针, 不过我的操作系统知识非常不扎实(非科班), 所以想请教下大家这里的endless loop的第二个if 어떻게 분석되는지 알고 있습니다(여기서 핸들 처리 등

).

감사합니다

淡淡烟草味淡淡烟草味2685일 전784

모든 응답(1)나는 대답할 것이다

  • 阿神

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

    _callnewh는 메모리 할당 실패를 처리하기 위해 핸들을 호출합니다. 이 핸들은 일부 메모리를 해제하려고 시도하거나 일정 시간 동안 기다리거나 직접 예외를 발생시킬 수 있습니다. 핸들 호출이 _callnewh(size) != 0을 성공적으로 반환하면 new는 호출이 _callnewh(size) == 0에 실패하면 다시 적용을 시도합니다. 이상. _callnewh(size) != 0,那么new会再一次尝试申请,如果调用失败_callnewh(size) == 0,则抛出相关异常。

    if (size == SIZE_MAX)说明申请的对象数太多(size_t理论上能表达任何对象的数量)。else

    if (size == SIZE_MAX)는 신청한 개체 수가 너무 많다는 의미입니다(size_t는 이론적으로 모든 개체의 수를 표현할 수 있음). else는 일반적인 애플리케이션 오류입니다. std_bad_array_new_length 및 std_bad_alloc은 표준 라이브러리의 해당 예외를 참조합니다.

    관련 인터페이스: _set_new_handler🎜

    회신하다
    0
  • 취소회신하다