亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? dms.c

?? nucleas source code
?? C
?? 第 1 頁 / 共 2 頁
字號:

            /* Is this free block, minus the overhead, already aligned? */
            if (address % alignment != 0)
            {
                /* Not aligned, can the free block be split in front? */
                next_aligned = address + (alignment - 1);
                next_aligned /= alignment;
                next_aligned *= alignment;
                split_size = next_aligned - address;

                /* Is space from start of block to aligned location large enough
                   to contain 2 DM_OVERHEAD plus pool -> dm_min_allocation? */
                if (split_size < ((2 * DM_OVERHEAD) + pool -> dm_min_allocation))
                {
                    /* No, so try to make space for overhead and dm_min_allocation */
                    next_aligned = address + (2 * DM_OVERHEAD) +
                                  (pool -> dm_min_allocation) + (alignment - 1);
                    next_aligned /= alignment;
                    next_aligned *= alignment;
                    split_size = next_aligned - address;
                }

                /* Adjust free_size for result of front split */
                if (free_size > split_size)

                    free_size -= split_size;

                else

                    /* Can't adjust block beginning, so keep searching */
                    free_size = 0;
            }
        }

        /* Determine if the search should continue.  */
        if (free_size < size)

            /* Large enough block has not been found.  Move the search
               pointer to the next block.  */
            memory_ptr =  memory_ptr -> dm_next_memory;
    } while((free_size < size) && (memory_ptr != pool -> dm_search_ptr));

    /* Determine if the memory is available.  */
    if (free_size >= size)
    {

        /* A block that satisfies the request has been found.  */

        /* Is a front split required? The front split will represent the chunk
           of memory that goes from the last pointer to the aligned address. */
        if(address % alignment != 0)
        {
            /* Not aligned, front split the block, leaving an allocated block. */
            new_ptr = (DM_HEADER*)(((UNSIGNED)(memory_ptr)) + split_size);

            /* Mark the new block as free.  */
            new_ptr -> dm_memory_free =  NU_TRUE;

            /* Put the pool pointer into the new block.  */
            new_ptr -> dm_memory_pool =  pool;

            /* Build the necessary pointers.  */
            new_ptr -> dm_previous_memory =  memory_ptr;
            new_ptr -> dm_next_memory =      memory_ptr -> dm_next_memory;
            (new_ptr -> dm_next_memory) -> dm_previous_memory =  new_ptr;
            memory_ptr -> dm_next_memory =   new_ptr;

            /* Decrement the available byte count by one DM_OVERHEAD. */
            pool -> dm_available = pool -> dm_available - DM_OVERHEAD;

            /* Point to new aligned free block. */
            memory_ptr = new_ptr;
        }

        /* Determine if the remaining block needs to be tail split. */
        if (free_size >= (size + DM_OVERHEAD + pool -> dm_min_allocation))
        {

            /* Yes, split the block.  */
            new_ptr =  (DM_HEADER *) (((BYTE_PTR) memory_ptr) + size +
                                                DM_OVERHEAD);

            /* Mark the new block as free.  */
            new_ptr -> dm_memory_free =  NU_TRUE;

            /* Put the pool pointer into the new block.  */
            new_ptr -> dm_memory_pool =  pool;

            /* Build the necessary pointers.  */
            new_ptr -> dm_previous_memory =  memory_ptr;
            new_ptr -> dm_next_memory =      memory_ptr -> dm_next_memory;
            (new_ptr -> dm_next_memory) -> dm_previous_memory =  new_ptr;
            memory_ptr -> dm_next_memory =   new_ptr;

            /* Decrement the available byte count.  */
            pool -> dm_available =  pool -> dm_available - size - DM_OVERHEAD;
        }
        else

            /* Decrement the entire free size from the available bytes
               count.  */
            pool -> dm_available =  pool -> dm_available - free_size;

        /* Mark the allocated block as not available.  */
        memory_ptr -> dm_memory_free =  NU_FALSE;

        /* Should the search pointer be moved?   */
        if (pool -> dm_search_ptr == memory_ptr)

            /* Move the search pointer to the next free memory slot.  */
            pool -> dm_search_ptr =  memory_ptr -> dm_next_memory;

        /* Return a memory address to the caller.  */
        *return_pointer =  (VOID *) (((BYTE_PTR) memory_ptr) + DM_OVERHEAD);
#ifdef INCLUDE_PROVIEW
        _RTProf_DumpMemoryPool(RT_PROF_ALLOCATE_MEMORY,pool,RT_PROF_OK);
#endif /*INCLUDE_PROVIEW*/
    }
    else
    {

        /* Enough dynamic memory is not available.  Determine if suspension is
           required. */
        if (suspend)
        {

            /* Suspension is selected.  */

            /* Increment the number of tasks waiting.  */
            pool -> dm_tasks_waiting++;

#ifdef INCLUDE_PROVIEW
            _RTProf_DumpMemoryPool(RT_PROF_ALLOCATE_MEMORY,pool,RT_PROF_WAIT);
#endif /*INCLUDE_PROVIEW*/
            /* Setup the suspend block and suspend the calling task.  */
            suspend_ptr =  &suspend_block;
            suspend_ptr -> dm_memory_pool =              pool;
            suspend_ptr -> dm_request_size =             size;
            suspend_ptr -> dm_suspend_link.cs_next =     NU_NULL;
            suspend_ptr -> dm_suspend_link.cs_previous = NU_NULL;
            task =                            (TC_TCB *) TCT_Current_Thread();
            suspend_ptr -> dm_suspended_task =           task;

            /* Determine if priority or FIFO suspension is associated with the
               memory pool.  */
            if (pool -> dm_fifo_suspend)
            {

                /* FIFO suspension is required.  Link the suspend block into
                   the list of suspended tasks on this memory pool.  */
                CSC_Place_On_List((CS_NODE **)
                        &(pool -> dm_suspension_list),
                                        &(suspend_ptr -> dm_suspend_link));
            }
            else
            {

                /* Get the priority of the current thread so the suspend block
                   can be placed in the appropriate place.  */
                suspend_ptr -> dm_suspend_link.cs_priority =
                                                     TCC_Task_Priority(task);

                CSC_Priority_Place_On_List((CS_NODE **)
                        &(pool -> dm_suspension_list),
                                        &(suspend_ptr -> dm_suspend_link));
            }

            /* Protect against system access.  */
            TCT_System_Protect();

            /* Save the list protection in preparation for suspension.  */
            TCT_Set_Suspend_Protect(&(pool -> dm_protect));

            /* Release protection of dynamic memory pool.  */
            TCT_Unprotect_Specific(&(pool -> dm_protect));

            /* Finally, suspend the calling task. Note that the suspension call
               automatically clears the system protection.  */
            TCC_Suspend_Task((NU_TASK *) task, NU_MEMORY_SUSPEND,
                                        DMC_Cleanup, suspend_ptr, suspend);

            /* Pickup the return status.  */
            status =            suspend_ptr -> dm_return_status;
            *return_pointer =   suspend_ptr -> dm_return_pointer;
        }
        else
        {

            /* No suspension requested.  Simply return an error status.  */
            status =            NU_NO_MEMORY;
            *return_pointer =   NU_NULL;
#ifdef INCLUDE_PROVIEW
            _RTProf_DumpMemoryPool(RT_PROF_ALLOCATE_MEMORY,pool,RT_PROF_FAIL);
#endif /*INCLUDE_PROVIEW*/
        }
    }

    /* Release protection of the memory pool.  */
    TCT_Unprotect();

    /* Return to user mode */
    NU_USER_MODE();

    /* Return the completion status.  */
    return(status);
}






?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产精品午夜电影| 国产欧美精品一区二区色综合| 成人一级片网址| 国产成人精品亚洲日本在线桃色| 精品一区二区三区日韩| 美国av一区二区| 欧美aⅴ一区二区三区视频| 日韩av一区二区三区| 三级一区在线视频先锋| 日韩精品五月天| 精品夜夜嗨av一区二区三区| 国产一区二区不卡在线| 成人永久aaa| 在线观看中文字幕不卡| 欧美日韩一本到| 日韩视频一区二区三区在线播放| 欧美成人猛片aaaaaaa| 国产精品色哟哟| 亚洲一卡二卡三卡四卡无卡久久| 日本强好片久久久久久aaa| 韩国三级中文字幕hd久久精品| 高潮精品一区videoshd| 欧美私人免费视频| 精品国产污网站| 中文字幕在线观看一区二区| 天堂资源在线中文精品| 成人做爰69片免费看网站| 色哟哟精品一区| 欧美xxx久久| 一区二区三区四区高清精品免费观看 | aaa亚洲精品| 欧美伦理影视网| 欧美经典一区二区| 亚洲成人动漫在线观看| 国产成人a级片| 欧美色欧美亚洲另类二区| 久久综合国产精品| 一区二区三区精品在线| 国产高清久久久久| 91精品婷婷国产综合久久性色| 国产午夜精品福利| 日韩av一区二区在线影视| 成人亚洲一区二区一| 日韩亚洲欧美综合| 亚洲男人电影天堂| 国产精品自拍一区| 91麻豆精品91久久久久同性| 亚洲色图欧美激情| 国产精品一区二区久久精品爱涩| 欧美日韩国产电影| 亚洲精品欧美二区三区中文字幕| 国产成人精品亚洲日本在线桃色 | 丝袜美腿亚洲色图| 国产午夜三级一区二区三| 久久精品国产免费看久久精品| 久久综合久久综合亚洲| 欧美日韩在线一区二区| 欧洲激情一区二区| 5566中文字幕一区二区电影| 在线精品视频免费观看| 欧美色大人视频| 欧美一区二区三区人| 亚洲国产精品精华液ab| 国产精品沙发午睡系列990531| 亚洲欧美日韩在线不卡| 欧美一区二区免费| 波多野结衣在线一区| 精品一区二区三区av| 国产黄色成人av| 精品国偷自产国产一区| 无码av免费一区二区三区试看| 日本高清不卡一区| 日韩美女视频一区二区| 99久久精品国产精品久久| 日本一区二区在线不卡| 韩国精品主播一区二区在线观看| 3751色影院一区二区三区| 性做久久久久久免费观看| 欧美日韩一二区| 日韩二区三区在线观看| 欧美一区二区黄色| 久久精品国产亚洲5555| 久久久精品中文字幕麻豆发布| 国产精品18久久久久久久久| 久久久激情视频| 成人h动漫精品| 亚洲精品v日韩精品| 色偷偷久久人人79超碰人人澡| 一区二区免费在线播放| 欧美日韩精品一区视频| 蜜桃av噜噜一区| 久久精品人人做人人爽97| 成人精品电影在线观看| 亚洲区小说区图片区qvod| 欧美天天综合网| 久久不见久久见中文字幕免费| 亚洲精品在线免费观看视频| 成人av免费观看| 亚洲国产视频在线| 久久综合色鬼综合色| 91性感美女视频| 免费看日韩精品| 亚洲天堂免费看| 日韩欧美精品三级| 成人精品国产一区二区4080| 亚洲一级二级三级| 精品sm捆绑视频| 日本精品免费观看高清观看| 欧美aaaaaa午夜精品| 1024成人网色www| 欧美一区二区三区视频| 成人ar影院免费观看视频| 国产精品久久久久久久岛一牛影视| 天堂成人国产精品一区| 精品成人一区二区| 成人精品一区二区三区中文字幕| 亚洲精品免费在线播放| 日韩小视频在线观看专区| 99国产精品国产精品毛片| 日韩av中文字幕一区二区| 中文字幕一区二区在线观看| 337p亚洲精品色噜噜狠狠| 成人免费不卡视频| 久久 天天综合| 婷婷中文字幕综合| 亚洲啪啪综合av一区二区三区| 精品国产sm最大网站免费看| 欧美日韩高清一区| 91黄色激情网站| 91啪在线观看| 国产99一区视频免费| 青娱乐精品在线视频| 亚洲日本电影在线| 国产欧美日韩三级| 精品粉嫩aⅴ一区二区三区四区| 欧洲亚洲精品在线| 91美女在线看| www.色精品| av在线不卡观看免费观看| 国产精品538一区二区在线| 蜜臀久久99精品久久久画质超高清 | 成人午夜视频福利| 韩国精品久久久| 另类调教123区| 久久精品国产在热久久| 日本成人中文字幕在线视频| 亚洲国产精品一区二区www| 亚洲综合视频在线观看| 亚洲精品国产视频| 一区二区三区四区激情| 亚洲女女做受ⅹxx高潮| 国产精品美女视频| 日韩一区中文字幕| 中文字幕中文在线不卡住| 日本一区二区三区在线观看| 久久午夜老司机| 久久久国产午夜精品| 中文字幕国产一区二区| 中文字幕一区二区三区视频 | 亚洲私人影院在线观看| 亚洲视频一二区| 亚洲一区在线看| 天天影视涩香欲综合网 | 国内精品伊人久久久久av一坑| 另类专区欧美蜜桃臀第一页| 韩国午夜理伦三级不卡影院| 国产高清视频一区| 色综合网站在线| 在线视频欧美精品| 欧美老年两性高潮| 精品国内片67194| 国产精品毛片a∨一区二区三区| 中文字幕亚洲在| 一区二区成人在线观看| 天天做天天摸天天爽国产一区| 性久久久久久久久久久久| 免费不卡在线视频| 成人性生交大合| 欧美无砖砖区免费| 日韩精品一区二区三区在线播放 | 日韩欧美久久久| 国产精品全国免费观看高清 | 蜜臀久久99精品久久久久宅男| 极品尤物av久久免费看| 99综合影院在线| 337p亚洲精品色噜噜| 国产精品三级在线观看| 午夜影视日本亚洲欧洲精品| 国产一区二区在线视频| 欧美亚洲图片小说| 亚洲精品一区二区三区蜜桃下载| 国产精品久久久久一区| 日本中文字幕一区二区有限公司| 国产乱子轮精品视频| 欧美四级电影网| 中文字幕一区二区三区四区不卡 | 欧美精品一区二区三区一线天视频| 国产女人18水真多18精品一级做| 一区二区三区av电影| 国产成人夜色高潮福利影视|