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

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

?? heapgrow.c

?? C標準庫源代碼,能提高對C的理解,不錯的哦
?? C
?? 第 1 頁 / 共 2 頁
字號:

static unsigned short *pMemErr = (unsigned short *)0x220;
static int index_start = 0;

/***
*_heap_grow() - Grow the heap
*
*Purpose:
*       Get memory from the OS and add it to the heap.
*
*Entry:
*       size_t _size = user's block request
*
*Exit:
*        0 = success, new mem is in the heap
*       -1 = failure
*
*Exceptions:
*
*******************************************************************************/

int __cdecl _heap_grow (
        REG1 size_t size
        )
{
        REG2 int index;
        struct _heap_region_ *pHeapRegions;
        int free_entry = -1;
        size_t sizeTmp;
        Handle hTemp;

        /*
         * Bump size to include header and round to nearest page boundary.
         */

        size += _HDRSIZE;
        size = _ROUND2(size, _GRANULARITY);

        /*
         * Loop through the region table looking for an existing region
         * we can grow.  Remember the index of the first null region entry.
         *
         * size = size of grow request
         */

        for ( index=index_start ; index < _heap_region_table_cur; index++ ) {

                pHeapRegions = (struct _heap_region_ *)(*hHeapRegions);
                        /*
                         * Grow this region to satisfy the request.
                         */
                if ( (pHeapRegions+index)->_regbase != NULL)
                        {
                        if (_heap_grow_region(index, size) != -1)
                                {
                                index_start = index;
                                return 0;
                                }
                        }

                pHeapRegions = (struct _heap_region_ *)(*hHeapRegions);
                if ( (free_entry == -1) &&
                    ((pHeapRegions+index)->_regbase == NULL) )

                        /*
                         * Remember 1st free table entry for later
                         */
                        {
                        free_entry = index;
                        break;
                        }

        }

        /*
         * Could not find any existing regions to grow.  Try to
         * get a new region.
         *
         * size = size of grow request
         * free_entry = index of first free entry in table
         */

        if ( free_entry == -1)
                /*
                 * No free table entries: grow heap region table.
                 */
                {
                sizeTmp = sizeof(struct _heap_region_)*(_heap_region_table_cur+_HEAP_REGIONMAX);
                if (hHeapRegions)
                        {
                        SetHandleSize(hHeapRegions, sizeTmp);
                        }
                if (hHeapRegions== NULL || *pMemErr != 0)
                        {
                        /*
                         * grow failed
                         */
                        hTemp = NewHandle(sizeTmp);
                        if (hTemp == NULL)
                                {
                                return (-1);
                                }
                        HLock(hTemp);
                        if (hHeapRegions != NULL)
                                {
                                BlockMove(*hHeapRegions, *hTemp, sizeof(struct _heap_region_)*_heap_region_table_cur);
                                DisposeHandle(hHeapRegions);
                                }
                        hHeapRegions = hTemp;
                        }
                /*
                 * set rest of the table to zero
                 */
                memset(*hHeapRegions + sizeof(struct _heap_region_)*_heap_region_table_cur, 0, sizeof(struct _heap_region_)*_HEAP_REGIONMAX);
                free_entry = _heap_region_table_cur;
                _heap_region_table_cur += _HEAP_REGIONMAX;
                }
        /*
         * Get a new region to satisfy the request.
         */

        return( _heap_new_region(free_entry, size) );
}


/***
*_heap_new_region() - Get a new heap region
*
*Purpose:
*       Get a new heap region and put it in the region table.
*       Also, grow it large enough to support the caller's
*       request.
*
*       NOTES:
*       (1) Caller has verified that there is room in the _heap_region
*       table for another region.
*       (2) The caller must have rounded the size to a page boundary.
*
*Entry:
*       int index = index in table where new region data should go
*       size_t size = size of request (this has been rounded to a
*                       page-sized boundary)
*
*Exit:
*        0 = success
*       -1 = failure
*
*Exceptions:
*
*******************************************************************************/

static int __cdecl _heap_new_region (
        REG1 unsigned index,
        size_t size
        )
{
        void * region;
        REG2 unsigned int regsize;
        struct _heap_region_ *pHeapRegions;


        /*
         * Round the heap region size to a page boundary (in case
         * the user played with it).
         */

        regsize = _ROUND2(_heap_regionsize, _PAGESIZE_);

        /*
         * See if region is big enough for request
         */

        if (regsize < size)
                regsize = size;

        /*
         * Go get the new region
         */

#ifdef _M_MPPC
        if ((region = NewPtr(regsize + 8)) == NULL)
#else  /* _M_MPPC */
        if ((region = NewPtr(regsize + 4)) == NULL)
#endif  /* _M_MPPC */
                {
                goto error;
                }

        /*
         * Put the new region in the table.
         */

        pHeapRegions = (struct _heap_region_ *)*hHeapRegions;
        if (((unsigned long)region & 0x3) != 0)
                {
                /* we are not allocating at 4 bytes bound */
                (pHeapRegions + index)->_regbase = (void *)_ROUND2((size_t)region, _GRANULARITY);
                }
        else
                {
                (pHeapRegions + index)->_regbase = region;
                }

        (pHeapRegions + index)->_regbaseCopy = region;
        (pHeapRegions + index)->_totalsize = regsize;
        (pHeapRegions + index)->_currsize = 0;


        /*
         * Grow the region to satisfy the size request.
         */

        if (_heap_grow_region(index, size) != 0) {

                /*
                 * Ouch.  Allocated a region but couldn't commit
                 * any pages in it.  Free region and return error.
                 */

                _heap_free_region(index);
                goto error;
        }


        /*
         * Good return
         */

        /* done:   unreferenced label to be removed */
                return(0);

        /*
         * Error return
         */

        error:
                return(-1);

}


/***
*_heap_grow_region() - Grow a heap region
*
*Purpose:
*       Grow a region and add the new memory to the heap.
*
*       NOTES:
*       (1) The caller must have rounded the size to a page boundary.
*
*Entry:
*       unsigned index = index of region in the _heap_regions[] table
*       size_t size = size of request (this has been rounded to a
*                       page-sized boundary)
*
*Exit:
*        0 = success
*       -1 = failure
*
*Exceptions:
*
*******************************************************************************/

int __cdecl _heap_grow_region (
        REG1 unsigned index,
        size_t size
        )
{
        size_t left;
        REG2 size_t growsize;
        void * base;
        struct _heap_region_ *pHeapRegions;
        struct _heap_region_ *pHRTmp;


        /*
         * Init some variables
         * left = space left in region
         * base = base of next section of region to validate
         */

        pHeapRegions = (struct _heap_region_ *)(*hHeapRegions);
        pHRTmp = pHeapRegions + index;
        left = pHRTmp->_totalsize - pHRTmp->_currsize;

        base = (char *) (pHRTmp->_regbase) + pHRTmp->_currsize;

        /*
         * Make sure we can satisfy request
         */
        growsize = _ROUND2(size, _GRANULARITY);

        if (left < growsize)
                {
                size_t sizeTmp;

                sizeTmp = growsize-left+1+ pHRTmp->_totalsize;
                sizeTmp = _ROUND2(sizeTmp, _GRANULARITY);
                SetPtrSize(pHRTmp->_regbase, sizeTmp);
                pHeapRegions = (struct _heap_region_ *)(*hHeapRegions);
                pHRTmp = pHeapRegions + index;
                if (*pMemErr != 0)
                        {
                        goto error;
                        }
                pHRTmp->_totalsize = sizeTmp;
                left = sizeTmp - pHRTmp->_currsize;
                base = (char *) (pHRTmp->_regbase) + pHRTmp->_currsize;
                }

        /*
         * Update the region data base
         */

        pHRTmp->_currsize += growsize;




        /*
         * Add the memory to the heap
         */

        if (_heap_addblock(base, growsize) != 0)
                _heap_abort();


        /*
         * Good return
         */

        /* done:   unreferenced label to be removed */
                return(0);

        /*
         * Error return
         */

        error:
                return(-1);

}


/***
*_heap_free_region() - Free up a region
*
*Purpose:
*       Return a heap region to the OS and zero out
*       corresponding region data entry.
*
*Entry:
*       int index = index of region to be freed
*
*Exit:
*       void
*
*Exceptions:
*
*******************************************************************************/

void __cdecl _heap_free_region (
        REG1 int index
        )
{
        struct _heap_region_ *pHeapRegions;

        /*
         * Give the memory back to the OS
         */

        pHeapRegions = (struct _heap_region_ *)(*hHeapRegions);
        if ((pHeapRegions + index)->_regbase)
                {
                DisposePtr((pHeapRegions + index)->_regbaseCopy);
                }

        /*
         * Zero out the heap region entry
         */

        pHeapRegions = (struct _heap_region_ *)(*hHeapRegions);
        (pHeapRegions + index)->_regbase = NULL;
        (pHeapRegions + index)->_currsize = 0;
        (pHeapRegions + index)->_totalsize = 0;

}


#endif  /* defined (_M_MPPC) || defined (_M_M68K) */

#endif  /* _WIN32 */

#endif  /* WINHEAP */

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
中文字幕一区二区三中文字幕| 日韩中文字幕av电影| 天天综合色天天综合| 国产91精品入口| 欧美日韩你懂的| 亚洲品质自拍视频| 国产精品一二三在| 26uuu精品一区二区在线观看| 亚洲一区av在线| 91一区二区在线| 国产精品拍天天在线| 国产精品99久久久久久似苏梦涵 | 99热精品国产| 精品久久国产字幕高潮| 亚洲成人福利片| 一本久久a久久精品亚洲| 中文字幕第一区| 成人av影视在线观看| 国产欧美日韩亚州综合 | 国v精品久久久网| 精品久久五月天| 美腿丝袜一区二区三区| 精品视频在线免费看| 亚洲黄色免费电影| 91色.com| 亚洲午夜在线电影| www.在线成人| 亚洲丝袜制服诱惑| 91美女视频网站| 亚洲欧洲国产日韩| 色婷婷香蕉在线一区二区| 亚洲青青青在线视频| 91女人视频在线观看| 亚洲综合色噜噜狠狠| 欧美日韩一区二区三区在线| 午夜精品福利一区二区三区av | 久久精品国产**网站演员| 日韩一区二区影院| 美女免费视频一区| 久久亚洲一区二区三区明星换脸| 国产麻豆视频一区二区| 国产精品久久久久久久久免费樱桃| 成人午夜在线播放| 亚洲欧美另类在线| 7777精品伊人久久久大香线蕉完整版 | 2023国产精华国产精品| 国产成人在线免费| 国产精品每日更新| 在线观看日韩毛片| 美女一区二区在线观看| 国产午夜久久久久| 在线观看一区二区视频| 日韩国产精品91| 国产欧美一区二区精品忘忧草| av欧美精品.com| 婷婷国产在线综合| 国产亚洲精久久久久久| 色猫猫国产区一区二在线视频| 丝袜诱惑制服诱惑色一区在线观看| 精品国产青草久久久久福利| 北条麻妃国产九九精品视频| 亚洲小说春色综合另类电影| 欧美电视剧在线看免费| 成人的网站免费观看| 午夜不卡在线视频| 久久久久久毛片| 欧美日韩精品三区| 国产精品一区三区| 日韩精品乱码av一区二区| 中文在线资源观看网站视频免费不卡| 欧美在线一区二区三区| 国产精品一二三| 午夜精品久久久久久久久| 国产精品天美传媒沈樵| 91精品久久久久久久99蜜桃| 成人av第一页| 国产一区二区美女| 午夜不卡av免费| 亚洲欧美成人一区二区三区| 欧美成人aa大片| 欧美中文字幕亚洲一区二区va在线| 国产乱码字幕精品高清av| 亚洲国产视频直播| 综合色天天鬼久久鬼色| 国产亚洲自拍一区| 欧美一区二区高清| 欧美日韩精品一区视频| 色综合天天狠狠| 国产91精品欧美| 久久精品久久综合| 偷拍自拍另类欧美| 亚洲女性喷水在线观看一区| 中文成人综合网| 精品av久久707| 欧美一级淫片007| 在线观看日韩毛片| 91精品办公室少妇高潮对白| 国产91精品欧美| 国产69精品一区二区亚洲孕妇| 麻豆精品视频在线| 美女一区二区三区| 免费在线观看一区| 亚洲风情在线资源站| 亚洲福利一二三区| 亚洲成人精品一区二区| 亚洲123区在线观看| 一区二区高清免费观看影视大全| 亚洲欧洲av色图| 1024亚洲合集| 亚洲男人电影天堂| 亚洲另类春色校园小说| 亚洲色图丝袜美腿| 一区二区三区精品久久久| 亚洲日本欧美天堂| 亚洲精品成人精品456| 亚洲欧美日韩国产手机在线| 亚洲精品福利视频网站| 亚洲综合视频在线观看| 五月婷婷激情综合网| 日韩电影在线一区二区三区| 另类小说欧美激情| 国产在线一区二区综合免费视频| 久久91精品久久久久久秒播| 国产自产2019最新不卡| 国产精品一区二区91| 99国产精品久久久久久久久久久| 色综合久久88色综合天天6| 在线视频国内一区二区| 欧美一区二区三区成人| 欧美变态口味重另类| 国产午夜亚洲精品理论片色戒| 国产精品污www在线观看| 伊人色综合久久天天人手人婷| 婷婷久久综合九色国产成人| 精品亚洲成a人在线观看| 国产精品1区二区.| 欧美aaa在线| 中文成人av在线| 尤物在线观看一区| 免费成人性网站| 椎名由奈av一区二区三区| 欧美国产综合色视频| 亚洲欧洲日产国产综合网| 亚洲国产精品天堂| 久久国产精品99久久人人澡| 成人黄色国产精品网站大全在线免费观看 | 性做久久久久久久免费看| 视频一区二区不卡| 国产成人av一区二区三区在线| 中文字幕乱码久久午夜不卡| 国产精品热久久久久夜色精品三区| 天堂一区二区在线免费观看| 午夜不卡在线视频| 亚洲综合视频在线观看| 蜜桃av一区二区三区电影| 成人美女在线视频| 日韩一区二区高清| 亚洲欧洲av另类| 美日韩黄色大片| 91久久久免费一区二区| 久久综合给合久久狠狠狠97色69| 亚洲乱码一区二区三区在线观看| 六月丁香综合在线视频| 在线观看网站黄不卡| 国产日韩精品一区二区三区| 日韩中文字幕1| 91官网在线观看| 亚洲国产成人一区二区三区| 奇米在线7777在线精品| 色8久久人人97超碰香蕉987| 久久精品免费在线观看| 男女男精品视频| 欧美日韩在线电影| 中文av一区特黄| 狠狠网亚洲精品| 在线播放欧美女士性生活| 成人免费在线视频| 国产91清纯白嫩初高中在线观看| 欧美另类z0zxhd电影| 亚洲精品国产一区二区三区四区在线| 国产成人在线电影| 日韩欧美一区二区视频| 一区二区高清在线| 色综合久久88色综合天天免费| 国产日韩欧美综合一区| 久久黄色级2电影| 欧美一区二区在线免费观看| 一区二区三区中文在线| 色成人在线视频| 国产精品久久久久久福利一牛影视| 国产中文一区二区三区| 欧美www视频| 精品一区二区三区免费播放| 91精品国产综合久久国产大片| 一区二区免费在线播放| 久久精品国产亚洲一区二区三区| 高清不卡在线观看| 久久久影视传媒| 成人精品一区二区三区四区 | 久久av老司机精品网站导航|