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

? 歡迎來(lái)到蟲(chóng)蟲(chóng)下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲(chóng)蟲(chóng)下載站

?? tiny-malloc.c

?? KPIT GNU Tools is a set of GNU development tools for Renesas microcontrollers.
?? C
?? 第 1 頁(yè) / 共 2 頁(yè)
字號(hào):
/* A replacement malloc with:   - Much reduced code size;   - Smaller RAM footprint;   - The ability to handle downward-growing heaps;   but   - Slower;   - Probably higher memory fragmentation;   - Doesn't support threads (but, if it did support threads,     it wouldn't need a global lock, only a compare-and-swap instruction);   - Assumes the maximum alignment required is the alignment of a pointer;   - Assumes that memory is already there and doesn't need to be allocated.* Synopsis of public routines  malloc(size_t n);     Return a pointer to a newly allocated chunk of at least n bytes, or null     if no space is available.  free(void* p);     Release the chunk of memory pointed to by p, or no effect if p is null.  realloc(void* p, size_t n);     Return a pointer to a chunk of size n that contains the same data     as does chunk p up to the minimum of (n, p's size) bytes, or null     if no space is available. The returned pointer may or may not be     the same as p. If p is null, equivalent to malloc.  Unless the     #define REALLOC_ZERO_BYTES_FREES below is set, realloc with a     size argument of zero (re)allocates a minimum-sized chunk.  memalign(size_t alignment, size_t n);     Return a pointer to a newly allocated chunk of n bytes, aligned     in accord with the alignment argument, which must be a power of     two.  Will fail if 'alignment' is too large.  calloc(size_t unit, size_t quantity);     Returns a pointer to quantity * unit bytes, with all locations     set to zero.  cfree(void* p);     Equivalent to free(p).  malloc_trim(size_t pad);     Release all but pad bytes of freed top-most memory back      to the system. Return 1 if successful, else 0.  malloc_usable_size(void* p);     Report the number usable allocated bytes associated with allocated     chunk p. This may or may not report more bytes than were requested,     due to alignment and minimum size constraints.  malloc_stats();     Prints brief summary statistics on stderr.  mallinfo()     Returns (by copy) a struct containing various summary statistics.  mallopt(int parameter_number, int parameter_value)     Changes one of the tunable parameters described below. Returns     1 if successful in changing the parameter, else 0.  Actually, returns 0     always, as no parameter can be changed.*/#ifdef __xstormy16__#define MALLOC_DIRECTION -1#endif#ifndef MALLOC_DIRECTION#define MALLOC_DIRECTION 1#endif#include <stddef.h>void* malloc(size_t);void    free(void*);void* realloc(void*, size_t);void* memalign(size_t, size_t);void* valloc(size_t);void* pvalloc(size_t);void* calloc(size_t, size_t);void    cfree(void*);int     malloc_trim(size_t);size_t  malloc_usable_size(void*);void    malloc_stats(void);int     mallopt(int, int);struct mallinfo mallinfo(void);typedef struct freelist_entry {  size_t size;  struct freelist_entry *next;} *fle;extern void * __malloc_end;extern fle __malloc_freelist;/* Return the number of bytes that need to be added to X to make it   aligned to an ALIGN boundary.  ALIGN must be a power of 2.  */#define M_ALIGN(x, align) (-(size_t)(x) & ((align) - 1))/* Return the number of bytes that need to be subtracted from X to make it   aligned to an ALIGN boundary.  ALIGN must be a power of 2.  */#define M_ALIGN_SUB(x, align) ((size_t)(x) & ((align) - 1))extern void __malloc_start;/* This is the minimum gap allowed between __malloc_end and the top of   the stack.  This is only checked for when __malloc_end is   decreased; if instead the stack grows into the heap, silent data   corruption will result.  */#define MALLOC_MINIMUM_GAP 32#ifdef __xstormy16__register void * stack_pointer asm ("r15");#define MALLOC_LIMIT stack_pointer#else#define MALLOC_LIMIT __builtin_frame_address (0)#endif#if MALLOC_DIRECTION < 0#define CAN_ALLOC_P(required)				\  (((size_t) __malloc_end - (size_t)MALLOC_LIMIT	\    - MALLOC_MINIMUM_GAP) >= (required))#else#define CAN_ALLOC_P(required)				\  (((size_t)MALLOC_LIMIT - (size_t) __malloc_end	\    - MALLOC_MINIMUM_GAP) >= (required))#endif/* real_size is the size we actually have to allocate, allowing for   overhead and alignment.  */#define REAL_SIZE(sz)						\  ((sz) < sizeof (struct freelist_entry) - sizeof (size_t)	\   ? sizeof (struct freelist_entry)				\   : sz + sizeof (size_t) + M_ALIGN(sz, sizeof (size_t)))#ifdef DEFINE_MALLOCvoid * __malloc_end = &__malloc_start;fle __malloc_freelist;void *malloc (size_t sz){  fle *nextfree;  fle block;  /* real_size is the size we actually have to allocate, allowing for     overhead and alignment.  */  size_t real_size = REAL_SIZE (sz);  /* Look for the first block on the freelist that is large enough.  */  for (nextfree = &__malloc_freelist;        *nextfree;        nextfree = &(*nextfree)->next)      {      block = *nextfree;            if (block->size >= real_size)	{	  /* If the block found is just the right size, remove it from	     the free list.  Otherwise, split it.  */	  if (block->size < real_size + sizeof (struct freelist_entry))	    {	      *nextfree = block->next;	      return (void *)&block->next;	    }	  else	    {	      size_t newsize = block->size - real_size;	      fle newnext = block->next;	      *nextfree = (fle)((size_t)block + real_size);	      (*nextfree)->size = newsize;	      (*nextfree)->next = newnext;	      goto done;	    }	}      /* If this is the last block on the freelist, and it was too small,	 enlarge it.  */      if (! block->next	  && __malloc_end == (void *)((size_t)block + block->size))	{	  size_t moresize = real_size - block->size;	  if (! CAN_ALLOC_P (moresize))	    return NULL;	  	  *nextfree = NULL;	  if (MALLOC_DIRECTION < 0)	    {	      block = __malloc_end = (void *)((size_t)block - moresize);	    }	  else	    {	      __malloc_end = (void *)((size_t)block + real_size);	    }	  goto done;	}    }  /* No free space at the end of the free list.  Allocate new space     and use that.  */  if (! CAN_ALLOC_P (real_size))    return NULL;  if (MALLOC_DIRECTION > 0)    {      block = __malloc_end;      __malloc_end = (void *)((size_t)__malloc_end + real_size);    }  else    {      block = __malloc_end = (void *)((size_t)__malloc_end - real_size);    } done:  block->size = real_size;  return (void *)&block->next;}#endif#ifdef DEFINE_FREEvoidfree (void *block_p){  fle *nextfree;  fle block = (fle)((size_t) block_p - offsetof (struct freelist_entry, next));  if (block_p == NULL)    return;    /* Look on the freelist to see if there's a free block just before     or just after this block.  */  for (nextfree = &__malloc_freelist;        *nextfree;        nextfree = &(*nextfree)->next)    {      fle thisblock = *nextfree;      if ((size_t)thisblock + thisblock->size == (size_t) block)	{	  thisblock->size += block->size;	  if (MALLOC_DIRECTION > 0	      && thisblock->next	      && (size_t) block + block->size == (size_t) thisblock->next)	    {	      thisblock->size += thisblock->next->size;	      thisblock->next = thisblock->next->next;	    }	  return;	}      else if ((size_t) thisblock == (size_t) block + block->size)	{	  if (MALLOC_DIRECTION < 0	      && thisblock->next	      && (size_t) block == ((size_t) thisblock->next 				    + thisblock->next->size))	    {	      *nextfree = thisblock->next;	      thisblock->next->size += block->size + thisblock->size;	    }	  else	    {	      block->size += thisblock->size;	      block->next = thisblock->next;	      *nextfree = block;	    }	  return;	}      else if ((MALLOC_DIRECTION > 0		&& (size_t) thisblock > (size_t) block)	       || (MALLOC_DIRECTION < 0		   && (size_t) thisblock < (size_t) block))	break;    }  block->next = *nextfree;  *nextfree = block;  return;}#endif#ifdef DEFINE_REALLOCvoid *realloc (void *block_p, size_t sz){  fle block = (fle)((size_t) block_p - offsetof (struct freelist_entry, next));  size_t real_size = REAL_SIZE (sz);  size_t old_real_size;  if (block_p == NULL)    return malloc (sz);  old_real_size = block->size;  /* Perhaps we need to allocate more space.  */  if (old_real_size < real_size)    {      void *result;      size_t old_size = old_real_size - sizeof (size_t);            /* Need to allocate, copy, and free.  */      result = malloc (sz);      if (result == NULL)	return NULL;      memcpy (result, block_p, old_size < sz ? old_size : sz);      free (block_p);      return result;    }  /* Perhaps we can free some space.  */

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
成人精品国产一区二区4080| 亚洲黄色av一区| 成人av中文字幕| 亚洲成人av电影在线| 日韩精品专区在线| 91麻豆免费看片| 国产乱码精品一区二区三区忘忧草 | 91精品国产一区二区| 免费欧美日韩国产三级电影| 不卡av电影在线播放| 欧美精品一区二区三区在线播放 | 亚洲男同性视频| 精品少妇一区二区三区日产乱码| 91色九色蝌蚪| 国产精品18久久久久| 性久久久久久久| 亚洲欧美偷拍卡通变态| 久久久不卡网国产精品一区| 91精品国产综合久久久久久久久久 | 亚洲综合激情另类小说区| 久久品道一品道久久精品| www激情久久| 在线精品视频免费观看| 青青草国产精品97视觉盛宴| 国产欧美日本一区二区三区| 日韩亚洲欧美成人一区| 欧美性大战久久久久久久| 成人午夜视频福利| 麻豆精品视频在线观看| 亚洲成年人影院| 亚洲综合丝袜美腿| 自拍偷拍国产精品| 欧美国产国产综合| 国产亚洲一区字幕| 精品va天堂亚洲国产| 91精品久久久久久久91蜜桃| 欧美日韩免费观看一区三区| 色88888久久久久久影院野外 | 亚洲成av人片在线| 亚洲免费观看高清在线观看| 中文字幕在线不卡| 国产精品美女一区二区在线观看| 国产亚洲综合色| 国产亚洲成av人在线观看导航| 精品国产乱码久久久久久久久| 国产麻豆一精品一av一免费 | 欧美伦理影视网| 风间由美性色一区二区三区| 国内精品久久久久影院薰衣草| 麻豆视频一区二区| 精品一区二区三区不卡| 久久精品国产久精国产| 精品一区二区三区蜜桃| 国内成人免费视频| 国内一区二区在线| 国产激情偷乱视频一区二区三区| 国产成人亚洲精品狼色在线| 成人做爰69片免费看网站| 国产精品18久久久久久vr| 成人免费高清视频在线观看| youjizz久久| 色诱亚洲精品久久久久久| 在线免费观看日本一区| 欧美日韩国产综合一区二区| 日韩一区二区精品葵司在线| 欧美精品一区二区三区一线天视频| 亚洲精品一区二区在线观看| 中文字幕乱码日本亚洲一区二区| 久草中文综合在线| 五月婷婷另类国产| 国产精品丝袜91| 国产精品久久影院| 中文字幕乱码久久午夜不卡| 亚洲天堂福利av| 亚洲福利视频导航| 久久精品国产精品亚洲综合| 岛国精品一区二区| 91久久久免费一区二区| 日韩欧美中文字幕精品| 国产日产欧美一区二区三区| 中文字幕一区视频| 天堂久久久久va久久久久| 精品一区二区三区免费观看| 不卡的av中国片| 69堂亚洲精品首页| 欧美经典一区二区| 亚洲国产成人tv| 国产精品一卡二卡在线观看| 色八戒一区二区三区| 精品国产乱码久久久久久蜜臀| 中文字幕日韩一区二区| 人禽交欧美网站| 成人精品免费网站| 91麻豆精品国产| 国产精品久久久久久久久动漫| 午夜视频在线观看一区二区三区| 亚洲人成网站色在线观看| 国产在线麻豆精品观看| 91小视频在线免费看| 91精品国产综合久久精品app| 欧美韩国日本一区| 日韩国产欧美三级| 色婷婷av一区二区| 久久久久9999亚洲精品| 视频一区二区不卡| 91免费看视频| 久久精品一区二区| 日韩国产在线观看一区| 91原创在线视频| 久久免费视频色| 婷婷开心激情综合| 日本乱人伦aⅴ精品| 国产三级欧美三级日产三级99| 香蕉久久夜色精品国产使用方法| 懂色中文一区二区在线播放| 日韩美女在线视频| 婷婷综合久久一区二区三区| 99久久精品情趣| 国产婷婷色一区二区三区| 蜜臀av性久久久久蜜臀av麻豆| 欧美在线视频你懂得| 中文字幕亚洲欧美在线不卡| 国产精品99久| 2欧美一区二区三区在线观看视频| 亚洲第一在线综合网站| 中文在线一区二区| av亚洲精华国产精华精华| 亚洲女同女同女同女同女同69| 久久国产麻豆精品| 欧美美女一区二区在线观看| 一区二区三区在线视频播放| 成人avav在线| 国产日本亚洲高清| 国产自产2019最新不卡| 欧美成人精品二区三区99精品| 婷婷夜色潮精品综合在线| 欧美色男人天堂| 亚洲靠逼com| 色香蕉久久蜜桃| 亚洲免费av网站| 91麻豆蜜桃一区二区三区| 国产精品久久网站| 99国产精品久久久久久久久久| 国产精品免费aⅴ片在线观看| 国产成都精品91一区二区三| 国产喂奶挤奶一区二区三区| 国产成人免费视频网站高清观看视频 | 欧美日韩精品一区二区天天拍小说| 夜夜揉揉日日人人青青一国产精品| 色诱亚洲精品久久久久久| 亚洲精品国产一区二区三区四区在线| 色综合久久中文综合久久97| 中文字幕av一区二区三区高| 欧美色图免费看| 亚洲国产成人av网| 在线观看三级视频欧美| 中文字幕一区av| 日本精品裸体写真集在线观看| 亚洲欧美另类久久久精品| 色综合天天综合网天天狠天天| 亚洲欧美aⅴ...| 在线日韩av片| 蜜臀av一区二区在线免费观看| 精品国产免费久久| 国产91精品免费| 亚洲欧洲在线观看av| 日本韩国一区二区三区| 日韩在线播放一区二区| 欧美成人综合网站| 成人福利视频网站| 尤物视频一区二区| 日韩一区二区免费在线观看| 国产不卡在线播放| 一区二区三区日韩精品视频| 91精品国产aⅴ一区二区| 国内精品不卡在线| 日韩一区中文字幕| 日韩一区二区三区电影在线观看| 国产精品一线二线三线| 亚洲精品免费看| 91精品国产高清一区二区三区蜜臀 | 欧美日本一区二区三区四区| 欧美日韩一区二区在线视频| 国产91丝袜在线18| 一区二区三区四区在线播放| 日韩一区二区在线观看视频 | 亚洲伦理在线免费看| 制服丝袜亚洲网站| 国产91精品一区二区麻豆网站 | 91精品国产综合久久精品麻豆| 国产乱码一区二区三区| 亚洲一线二线三线久久久| 欧美一区二区黄色| 波多野结衣在线一区| 日韩不卡免费视频| 亚洲特黄一级片| 精品黑人一区二区三区久久| 色妞www精品视频| 国产在线不卡一区| 亚洲电影中文字幕在线观看|