国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

c++ - Einige Zweifel an Operator new() und Handles in msvc?
淡淡煙草味
淡淡煙草味 2017-05-16 13:30:35
0
1
1014
void* __CRTDECL operator new(size_t const size)
{
    for (;;)
    {
        if (void* const block = malloc(size))
        {
            return block;
        }

        if (_callnewh(size) == 0)
        {
            if (size == SIZE_MAX)
            {
                __scrt_throw_std_bad_array_new_length();
            }
            else
            {
                __scrt_throw_std_bad_alloc();
            }
        }

        // The new handler was successful; try to allocate again...
    }
}

Ich wei?, wie das endless loop是為了等分配成功內(nèi)存然后返回指針, 不過(guò)我的操作系統(tǒng)知識(shí)非常不扎實(shí)(非科班), 所以想請(qǐng)教下大家這里的endless loop的第二個(gè)if analysiert wird (z. B. die Verarbeitung von Griffen hier usw.).

Danke

淡淡煙草味
淡淡煙草味

Antworte allen(1)
阿神

_callnewh會(huì)調(diào)用一個(gè)句柄,來(lái)處理內(nèi)存分配失敗。這個(gè)句柄可以嘗試釋放一些內(nèi)存或者等待一段時(shí)間或者直接拋個(gè)異常?。如果句柄調(diào)用成功返回_callnewh(size) != 0,那么new會(huì)再一次嘗試申請(qǐng),如果調(diào)用失敗_callnewh(size) == 0,則拋出相關(guān)異常。

if (size == SIZE_MAX)說(shuō)明申請(qǐng)的對(duì)象數(shù)太多(size_t理論上能表達(dá)任何對(duì)象的數(shù)量)。else是一般的申請(qǐng)失敗。std_bad_array_new_length和std_bad_alloc指在標(biāo)準(zhǔn)庫(kù)中對(duì)應(yīng)的異常。

相關(guān)接口: _set_new_handler

Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage