⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 bget

📁 COS 0.0.1.rar Cos操作系统源代码
💻
📖 第 1 页 / 共 2 页
字号:
Create  a  buffer  pool  of  <len>  bytes, using the storage starting at<buffer>.  You can call bpool() subsequently  to  contribute  additionalstorage to the overall buffer pool.        void *bget(bufsize size);Allocate  a  buffer  of  <size>  bytes.   The  address  of the buffer isreturned, or NULL if insufficient memory was available to  allocate  thebuffer.        void *bgetz(bufsize size);Allocate  a  buffer  of  <size>  bytes  and clear it to all zeroes.  Theaddress of the buffer is returned, or NULL if  insufficient  memory  wasavailable to allocate the buffer.        void *bgetr(void *buffer, bufsize newsize);Reallocate a buffer previously allocated by bget(), changing its size to<newsize> and  preserving  all  existing  data.   NULL  is  returned  ifinsufficient memory is available to reallocate the buffer, in which casethe original buffer remains intact.        void brel(void *buf);Return the buffer <buf>, previously allocated by  bget(),  to  the  freespace pool.        void bectl(int (*compact)(bufsize sizereq, int sequence),                   void *(*acquire)(bufsize size),                   void (*release)(void *buf),                   bufsize pool_incr);Expansion  control:  specify  functions  through  which  the package maycompact storage (or take other appropriate action)  when  an  allocationrequest   fails,   and  optionally  automatically  acquire  storage  forexpansion blocks when necessary,  and  release  such  blocks  when  theybecome  empty.   If  <compact> is non-NULL, whenever a buffer allocationrequest fails, the <compact> function  will  be  called  with  argumentsspecifying  the  number  of  bytes  (total buffer size, including headeroverhead) required to satisfy the allocation  request,  and  a  sequencenumber   indicating   the  number  of  consecutive  calls  on  <compact>attempting to satisfy this allocation request.  The sequence number is 1for  the  first  call  on  <compact> for a given allocation request, andincrements on subsequent calls, permitting  the  <compact>  function  totake  increasingly  dire  measures in an attempt to free up storage.  Ifthe <compact> function returns a nonzero value, the  allocation  attemptis  re-tried.   If  <compact>  returns 0 (as it must if it isn't able torelease any space or add storage to the  buffer  pool),  the  allocationrequest  fails,  which  can  trigger  automatic  pool  expansion  if the<acquire> argument is non-NULL.  At the time the <compact>  function  iscalled,  the  state  of the buffer allocator is identical to that at themoment the allocation request  was  made;  consequently,  the  <compact>function  may call brel(), bpool(), bstats(), and/or directly manipulatethe buffer pool in any manner which would be valid were the  applicationin  control.   This does not, however, relieve the <compact> function ofthe need to ensure that whatever actions it takes do not  change  thingsunderneath  the  application  that  made  the  allocation  request.  Forexample, a <compact> function that released a buffer in the  process  ofbeing  reallocated  with bgetr() would lead to disaster.  Implementing asafe and effective <compact> mechanism requires  careful  design  of  anapplication's  memory  architecture,  and  cannot  generally  be  easilyretrofitted into existing code.If <acquire> is non-NULL, that  function  will  be  called  whenever  anallocation  request  fails.   If  the  <acquire>  function  succeeds  inallocating the requested space and returns a pointer to  the  new  area,allocation  will  proceed  using the expanded buffer pool.  If <acquire>cannot obtain the requested space, it should return NULL and the  entireallocation   process   will  fail.   <pool_incr>  specifies  the  normalexpansion block  size.   Providing  an  <acquire>  function  will  causesubsequent  bget()  requests  for buffers too large to be managed in thelinked-block scheme (in other words, larger than <pool_incr>  minus  thebuffer  overhead)  to  be  satisfied  directly by calls to the <acquire>function.  Automatic release of empty pool blocks will occur only if allpool blocks in the system are the size given by <pool_incr>.        void bstats(bufsize *curalloc, bufsize *totfree,                    bufsize *maxfree, long *nget, long *nrel);The  amount  of  space  currently  allocated is stored into the variablepointed to by <curalloc>.  The total free space (sum of all free  blocksin  the  pool)  is stored into the variable pointed to by <totfree>, andthe size of the largest single block in the free space  pool  is  storedinto  the variable pointed to by <maxfree>.  The variables pointed to by<nget>  and  <nrel>  are  filled,  respectively,  with  the  number   ofsuccessful  (non-NULL  return)  bget()  calls  and  the number of brel()calls.        void bstatse(bufsize *pool_incr, long *npool,                     long *npget, long *nprel,                     long *ndget, long *ndrel);Extended statistics: The expansion block size will be  stored  into  thevariable pointed to by <pool_incr>, or the negative thereof if automaticexpansion block releases are disabled.  The number of  currently  activepool blocks will be stored into the variable pointed to by <npool>.  Thevariables pointed to  by  <npget>  and  <nprel>  will  be  filled  with,respectively,  the  number  of expansion block acquisitions and releaseswhich have occurred.  The variables pointed to by  <ndget>  and  <ndrel>will be filled with the number of bget() and brel() calls, respectively,managed through blocks directly allocated by the acquisition and releasefunctions.        void bufdump(void *buf);The buffer pointed to by <buf> is dumped on standard output.        void bpoold(void *pool, int dumpalloc, int dumpfree);All  buffers in the buffer pool <pool>, previously initialised by a callon  bpool(),  are  listed  in  ascending  memory  address   order.    If<dumpalloc> is nonzero, the contents of allocated buffers are dumped; if<dumpfree> is nonzero, the contents of free blocks are dumped.        int bpoolv(void *pool);The named buffer pool, previously initialised by a  call  on  bpool(),  isvalidated  for  bad  pointers,  overwritten  data,  etc.  If compiled withNDEBUG not defined, any error generates an assertion failure.  Otherwise 1is returned if the pool is valid, 0 if an error is found.BGET CONFIGURATION==================#define TestProg    20000  /* Generate built-in test program                              if defined.  The value specifies                              how many buffer allocation attempts                              the test program should make. */#define SizeQuant   4      /* Buffer allocation size quantum:                              all buffers allocated are a                              multiple of this size.  This                              MUST be a power of two. */#define BufDump     1      /* Define this symbol to enable the                              bpoold() function which dumps the                              buffers in a buffer pool. */#define BufValid    1      /* Define this symbol to enable the                              bpoolv() function for validating                              a buffer pool. */ #define DumpData    1      /* Define this symbol to enable the                              bufdump() function which allows                              dumping the contents of an allocated                              or free buffer. */#define BufStats    1      /* Define this symbol to enable the                              bstats() function which calculates                              the total free space in the buffer                              pool, the largest available                              buffer, and the total space                              currently allocated. */#define FreeWipe    1      /* Wipe free buffers to a guaranteed                              pattern of garbage to trip up                              miscreants who attempt to use                              pointers into released buffers. */#define BestFit     1      /* Use a best fit algorithm when                              searching for space for an                              allocation request.  This uses                              memory more efficiently, but                              allocation will be much slower. */#define BECtl       1      /* Define this symbol to enable the                              bectl() function for automatic                              pool space control.  */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -