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

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

?? heapgrow.c

?? C標準庫源代碼,能提高對C的理解,不錯的哦
?? C
?? 第 1 頁 / 共 2 頁
字號:
/***
*heapgrow.c - Grow the heap
*
*       Copyright (c) 1989-1997, Microsoft Corporation. All rights reserved.
*
*Purpose:
*       Get memory from OS and add to the heap.
*
*******************************************************************************/

#ifndef WINHEAP

#ifdef _WIN32


#include <cruntime.h>
#include <oscalls.h>
#include <heap.h>
#include <malloc.h>
#include <stdlib.h>

static int __cdecl _heap_new_region(unsigned, size_t);


/***
*_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;
        int free_entry = -1;

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

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

        /*
         * 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 = 0; index < _HEAP_REGIONMAX; index++) {

                if ( (_heap_regions[index]._totalsize -
                    _heap_regions[index]._currsize) >= size )

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

                        return( _heap_grow_region(index, size) );


                if ( (free_entry == -1) &&
                    (_heap_regions[index]._regbase == NULL) )

                        /*
                         * Remember 1st free table entry for later
                         */

                        free_entry = index;

        }

        /*
         * 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 >= 0 )

                /*
                 * Get a new region to satisfy the request.
                 */

                return( _heap_new_region(free_entry, size) );

        else
                /*
                 * No free table entries: return an error.
                 */

                return(-1);

}


/***
*_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;


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

        regsize = _ROUND2(_heap_regionsize, _PAGESIZE_);

        /*
         * To acommodate large users, request twice
         * as big a region next time around.
         */

        if ( _heap_regionsize < _heap_maxregsize )
                _heap_regionsize *= 2 ;

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

        if (regsize < size)
                regsize = size;

        /*
         * Go get the new region
         */

        if (!(region = VirtualAlloc(NULL, regsize, MEM_RESERVE,
        PAGE_READWRITE)))
                goto error;

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

         _heap_regions[index]._regbase = region;
         _heap_regions[index]._totalsize = regsize;
         _heap_regions[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;
        unsigned dosretval;


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

        left = _heap_regions[index]._totalsize -
                _heap_regions[index]._currsize;

        base = (char *) _heap_regions[index]._regbase +
                _heap_regions[index]._currsize;

        /*
         * Make sure we can satisfy request
         */

        if (left < size)
                goto error;

        /*
         * Round size up to next _heap_growsize boundary.
         * (Must round _heap_growsize itself to page boundary, in
         * case user set it himself).
         */

        growsize = _ROUND2(_heap_growsize, _PAGESIZE_);
        growsize = _ROUND(size, growsize);

        if (left < growsize)
                growsize = left;

        /*
         * Validate the new portion of the region
         */

        if (!VirtualAlloc(base, growsize, MEM_COMMIT, PAGE_READWRITE))
                dosretval = GetLastError();
        else
                dosretval = 0;

        if (dosretval)
                /*
                 * Error committing pages.  If out of memory, return
                 * error, else abort.
                 */

                if (dosretval == ERROR_NOT_ENOUGH_MEMORY)
                        goto error;
                else
                        _heap_abort();


        /*
         * Update the region data base
         */

        _heap_regions[index]._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
        )
{

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

        if (!VirtualFree(_heap_regions[index]._regbase, 0, MEM_RELEASE))
                _heap_abort();

        /*
         * Zero out the heap region entry
         */

        _heap_regions[index]._regbase = NULL;
        _heap_regions[index]._currsize =
        _heap_regions[index]._totalsize = 0;

}


#else  /* _WIN32 */

#if defined (_M_MPPC) || defined (_M_M68K)


#include <cruntime.h>
#include <heap.h>
#include <malloc.h>
#include <stdlib.h>
#include <string.h>
#include <macos\memory.h>               // Mac OS interface header
#include <macos\errors.h>
#include <macos\types.h>
#include <macos\traps.h>

static int __cdecl _heap_new_region(unsigned, size_t);
extern Handle hHeapRegions;
extern int _heap_region_table_cur;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
91女厕偷拍女厕偷拍高清| 欧美日韩国产一区| 91免费在线播放| 91一区二区在线| 在线视频国内自拍亚洲视频| 制服丝袜亚洲播放| 欧美一级高清片在线观看| 国产欧美日韩在线| 亚洲成人综合视频| 国产一区二区不卡在线| 一本色道a无线码一区v| 51精品国自产在线| 中文字幕乱码亚洲精品一区| 亚洲美女一区二区三区| 免费欧美在线视频| www.在线欧美| 欧美乱妇15p| 国产日韩成人精品| 蜜臀av在线播放一区二区三区| 国产河南妇女毛片精品久久久 | 国产亚洲视频系列| 亚洲一区二区三区小说| 国产一区二区三区av电影| 在线视频国内自拍亚洲视频| 久久网这里都是精品| 亚洲综合一区二区三区| 精品综合免费视频观看| 在线区一区二视频| 国产精品美女一区二区| 免费在线视频一区| 欧美制服丝袜第一页| 国产欧美日韩麻豆91| 蜜桃av噜噜一区| 一本久道中文字幕精品亚洲嫩| 欧美成人艳星乳罩| 一区二区三区四区在线播放| 国产传媒一区在线| 91精品国产色综合久久不卡电影| 亚洲男帅同性gay1069| 国产传媒日韩欧美成人| 亚洲精品一区二区三区99| 亚洲va国产天堂va久久en| 91丨porny丨户外露出| 久久久久久久久97黄色工厂| 亚洲午夜羞羞片| 色婷婷国产精品| 亚洲欧洲精品天堂一级| 成人午夜免费av| 国产欧美日韩另类一区| 国产精品影视在线观看| 2020国产精品| 国产呦萝稀缺另类资源| 精品久久人人做人人爱| 蜜臀av性久久久久蜜臀aⅴ流畅 | 欧美日韩国产高清一区二区三区 | 日韩欧美久久久| 视频一区二区三区在线| 欧美日韩国产系列| 三级久久三级久久| 欧美午夜电影网| 亚洲福利视频导航| 在线电影一区二区三区| 男人操女人的视频在线观看欧美 | 国产精品一区二区久激情瑜伽 | 国产一区二区三区精品视频| 日韩欧美第一区| 韩国成人在线视频| 欧美经典一区二区三区| 韩国v欧美v亚洲v日本v| 国产精品午夜在线观看| www.欧美色图| 一区二区三区毛片| 欧美精品黑人性xxxx| 乱中年女人伦av一区二区| 久久综合九色综合97婷婷| 国产精品一区二区果冻传媒| 国产肉丝袜一区二区| 91亚洲男人天堂| 天天亚洲美女在线视频| 久久综合五月天婷婷伊人| 粉嫩aⅴ一区二区三区四区| 亚洲欧洲综合另类| 欧美高清www午色夜在线视频| 奇米影视一区二区三区| 久久久久久久综合日本| 一本色道综合亚洲| 麻豆91免费观看| 中文无字幕一区二区三区| 欧美专区亚洲专区| 韩国v欧美v日本v亚洲v| 国产日本欧美一区二区| 欧美丝袜第三区| 国产很黄免费观看久久| 亚洲国产成人91porn| 久久午夜色播影院免费高清| 成人开心网精品视频| 亚洲成av人**亚洲成av**| 亚洲精品一区二区三区精华液| eeuss国产一区二区三区| 欧美v国产在线一区二区三区| 国产九九视频一区二区三区| 欧美人xxxx| 欧美aⅴ一区二区三区视频| 麻豆成人在线观看| 91麻豆产精品久久久久久| 精品国产凹凸成av人网站| 蜜桃视频在线观看一区二区| 欧美日韩视频专区在线播放| 亚洲精品国产a| 在线亚洲+欧美+日本专区| 国内精品在线播放| 欧美一区二区国产| 一区二区不卡在线视频 午夜欧美不卡在| 欧美一区二区成人| 色伊人久久综合中文字幕| 亚洲人妖av一区二区| 91黄色激情网站| 东方aⅴ免费观看久久av| 美女在线视频一区| 亚洲一区二区美女| 亚洲另类春色校园小说| 国产亚洲精品福利| 91麻豆精品国产综合久久久久久 | 91福利区一区二区三区| 老色鬼精品视频在线观看播放| 国产精品人成在线观看免费 | 亚洲视频一区二区在线| 亚洲国产精品ⅴa在线观看| 欧美一区二区三区日韩视频| 欧美午夜片在线观看| 99视频在线精品| 色中色一区二区| 欧美日韩国产另类一区| 日韩精品中文字幕一区| 欧美精品一区二区久久婷婷| 26uuu国产一区二区三区| 国产欧美日韩中文久久| 综合网在线视频| 亚洲高清三级视频| 精品一区二区三区香蕉蜜桃| 丰满岳乱妇一区二区三区 | 全国精品久久少妇| 国产一区二区不卡老阿姨| 波多野结衣中文一区| 欧美色区777第一页| 欧美一区二区成人| 国产精品毛片无遮挡高清| 一区二区不卡在线视频 午夜欧美不卡在| 亚洲一区二区视频在线| 免费成人性网站| www.日韩在线| 欧美日韩亚洲国产综合| 久久午夜国产精品| 亚洲午夜av在线| 国产精品综合二区| 欧美亚日韩国产aⅴ精品中极品| 欧美一区二区三区性视频| 国产亚洲精品精华液| 亚洲成av人片www| 成人免费看片app下载| 欧美日韩亚洲高清一区二区| 亚洲精品一线二线三线无人区| 亚洲色图视频网| 狠狠狠色丁香婷婷综合久久五月| 99久久精品国产一区二区三区| 日韩欧美一区二区免费| 亚洲欧美日韩国产中文在线| 久久精品国产亚洲aⅴ | 久久国产婷婷国产香蕉| 色综合av在线| 久久天天做天天爱综合色| 亚洲一区二区三区小说| 国产69精品久久777的优势| 91精品国产综合久久精品麻豆 | 日韩va欧美va亚洲va久久| 99在线精品免费| 久久久久国产一区二区三区四区| 五月天激情综合| 色综合天天做天天爱| 国产日韩精品一区| 久久99精品国产.久久久久| 日本大香伊一区二区三区| 国产欧美一区二区精品仙草咪| 另类中文字幕网| 91麻豆精品久久久久蜜臀| 亚洲一二三四在线观看| 成a人片亚洲日本久久| 久久视频一区二区| 青青草一区二区三区| 欧美日韩久久久一区| 亚洲一区二区精品3399| 欧美自拍偷拍一区| 一区二区三区不卡在线观看 | 亚洲精品在线三区| 久久99最新地址| 日韩视频123| 麻豆国产精品官网| 日韩视频免费直播| 九九精品一区二区| 欧美成人精品高清在线播放|