malloc.h
来自「eCos/RedBoot for勤研ARM AnywhereII(4510) 含」· C头文件 代码 · 共 473 行 · 第 1/2 页
H
473 行
"UFS quota", /* 27 M_DQUOT */ \ "UFS mount", /* 28 M_UFSMNT */ \ "shm", /* 29 M_SHM */ \ "VM map", /* 30 M_VMMAP */ \ "VM mapent", /* 31 M_VMMAPENT */ \ "VM object", /* 32 M_VMOBJ */ \ "VM objhash", /* 33 M_VMOBJHASH */ \ "VM pmap", /* 34 M_VMPMAP */ \ "VM pvmap", /* 35 M_VMPVENT */ \ "VM pager", /* 36 M_VMPAGER */ \ "VM pgdata", /* 37 M_VMPGDATA */ \ "file", /* 38 M_FILE */ \ "file desc", /* 39 M_FILEDESC */ \ "lockf", /* 40 M_LOCKF */ \ "proc", /* 41 M_PROC */ \ "subproc", /* 42 M_SUBPROC */ \ "LFS segment", /* 43 M_SEGMENT */ \ "LFS node", /* 44 M_LFSNODE */ \ "FFS node", /* 45 M_FFSNODE */ \ "MFS node", /* 46 M_MFSNODE */ \ "NQNFS Lease", /* 47 M_NQLEASE */ \ "NQNFS Host", /* 48 M_NQMHOST */ \ "Export Host", /* 49 M_NETADDR */ \ "NFS srvsock", /* 50 M_NFSSVC */ \ "NFS uid", /* 51 M_NFSUID */ \ "NFS daemon", /* 52 M_NFSD */ \ "ip_moptions", /* 53 M_IPMOPTS */ \ "in_multi", /* 54 M_IPMADDR */ \ "ether_multi", /* 55 M_IFMADDR */ \ "mrt", /* 56 M_MRTABLE */ \ "ISOFS mount", /* 57 M_ISOFSMNT */ \ "ISOFS node", /* 58 M_ISOFSNODE */ \ "MSDOSFS mount", /* 59 M_MSDOSFSMNT */ \ "MSDOSFS fat", /* 60 M_MSDOSFSFAT */ \ "MSDOSFS node", /* 61 M_MSDOSFSNODE */ \ "ttys", /* 62 M_TTYS */ \ "exec", /* 63 M_EXEC */ \ "miscfs mount", /* 64 M_MISCFSMNT */ \ "miscfs node", /* 65 M_MISCFSNODE */ \ "adosfs mount", /* 66 M_ADOSFSMNT */ \ "adosfs node", /* 67 M_ADOSFSNODE */ \ "adosfs anode", /* 68 M_ANODE */ \ "IP queue ent", /* 69 M_IPQ */ \ "afs", /* 70 M_AFS */ \ "adosfs bitmap", /* 71 M_ADOSFSBITMAP */ \ "EXT2FS node", /* 72 M_EXT2FSNODE */ \ "pfil", /* 73 M_PFIL */ \ "pfkey data", /* 74 M_PFKEY */ \ "tdb", /* 75 M_TDB */ \ "xform_data", /* 76 M_XDATA */ \ "vfs", /* 77 M_VFS */ \ "pagedep", /* 78 M_PAGEDEP */ \ "inodedep", /* 79 M_INODEDEP */ \ "newblk", /* 80 M_NEWBLK */ \ "bmsafemap", /* 81 M_BMSAFEMAP */ \ "allocdirect", /* 82 M_ALLOCDIRECT */ \ "indirdep", /* 83 M_INDIRDEP */ \ "allocindir", /* 84 M_ALLOCINDIR */ \ "freefrag", /* 85 M_FREEFRAG */ \ "freeblks", /* 86 M_FREEBLKS */ \ "freefile", /* 87 M_FREEFILE */ \ "diradd", /* 88 M_DIRADD */ \ "mkdir", /* 89 M_MKDIR */ \ "dirrem", /* 90 M_DIRREM */ \ "VM page bucket", /* 91 M_VMPBUCKET */ \ "VM swap", /* 92 M_VMSWAP */ \ "IPv6 discq", /* 93 M_DISCQ */ \ "IPv6 fragq", /* 94 M_FRAGQ */ \ "Sec Assoc", /* 95 M_SECA */ \ "IPv6 if info", /* 96 M_I6IFP */ \ "RaidFrame data", /* 97 M_RAIDFRAME */ \ "UVM amap", /* 98 M_UVMAMAP */ \ "UVM aobj", /* 99 M_UVMAOBJ */ \ "pool", /* 100 M_POOL */ \ "USB", /* 101 M_USB */ \ "USB device", /* 102 M_USBDEV */ \ "USB HC", /* 103 M_USBHC */ \ "pipe", /* 104 M_PIPE */ \ "memdesc", /* 105 M_MEMDESC */ \ NULL, \ NULL, NULL, NULL, NULL, NULL, \ NULL, NULL, NULL, NULL, NULL, \ NULL, NULL, NULL, NULL, NULL, \ NULL, \ "ip6_options", /* 123 M_IP6OPT */ \ "NDP", /* 124 M_IP6NDP */ \ "ip6rr", /* 125 M_IP6RR */ \ "rp_addr", /* 126 M_RR_ADDR */ \ "temp", /* 127 M_TEMP */ \}
#ifndef __ECOS
struct kmemstats {
long ks_inuse; /* # of packets of this type currently in use */
long ks_calls; /* total packets of this type ever allocated */
long ks_memuse; /* total memory held in bytes */
u_short ks_limblocks; /* number of times blocked for hitting limit */
u_short ks_mapblocks; /* number of times blocked for kernel map */
long ks_maxused; /* maximum number ever used */
long ks_limit; /* most that are allowed to exist */
long ks_size; /* sizes of this thing that are allocated */
long ks_spare;
};
/*
* Array of descriptors that describe the contents of each page
*/
struct kmemusage {
short ku_indx; /* bucket index */
union {
u_short freecnt;/* for small allocations, free pieces in page */
u_short pagecnt;/* for large allocations, pages alloced */
} ku_un;
};
#define ku_freecnt ku_un.freecnt
#define ku_pagecnt ku_un.pagecnt
/*
* Set of buckets for each size of memory block that is retained
*/
struct kmembuckets {
caddr_t kb_next; /* list of free blocks */
caddr_t kb_last; /* last free block */
long kb_calls; /* total calls to allocate this size */
long kb_total; /* total number of blocks allocated */
long kb_totalfree; /* # of free elements in this bucket */
long kb_elmpercl; /* # of elements in this sized allocation */
long kb_highwat; /* high water mark */
long kb_couldfree; /* over high water mark and could free */
};
#ifdef _KERNEL
#define MINALLOCSIZE (1 << MINBUCKET)
#define BUCKETINDX(size) \ ((size) <= (MINALLOCSIZE * 128) \ ? (size) <= (MINALLOCSIZE * 8) \ ? (size) <= (MINALLOCSIZE * 2) \ ? (size) <= (MINALLOCSIZE * 1) \ ? (MINBUCKET + 0) \ : (MINBUCKET + 1) \ : (size) <= (MINALLOCSIZE * 4) \ ? (MINBUCKET + 2) \ : (MINBUCKET + 3) \ : (size) <= (MINALLOCSIZE* 32) \ ? (size) <= (MINALLOCSIZE * 16) \ ? (MINBUCKET + 4) \ : (MINBUCKET + 5) \ : (size) <= (MINALLOCSIZE * 64) \ ? (MINBUCKET + 6) \ : (MINBUCKET + 7) \ : (size) <= (MINALLOCSIZE * 2048) \ ? (size) <= (MINALLOCSIZE * 512) \ ? (size) <= (MINALLOCSIZE * 256) \ ? (MINBUCKET + 8) \ : (MINBUCKET + 9) \ : (size) <= (MINALLOCSIZE * 1024) \ ? (MINBUCKET + 10) \ : (MINBUCKET + 11) \ : (size) <= (MINALLOCSIZE * 8192) \ ? (size) <= (MINALLOCSIZE * 4096) \ ? (MINBUCKET + 12) \ : (MINBUCKET + 13) \ : (size) <= (MINALLOCSIZE * 16384) \ ? (MINBUCKET + 14) \ : (MINBUCKET + 15))
/*
* Turn virtual addresses into kmem map indicies
*/
#define kmemxtob(alloc) (kmembase + (alloc) * NBPG)
#define btokmemx(addr) (((caddr_t)(addr) - kmembase) / NBPG)
#define btokup(addr) (&kmemusage[((caddr_t)(addr) - kmembase) >> CLSHIFT])
/*
* Macro versions for the usual cases of malloc/free
*/
#if defined(KMEMSTATS) || defined(DIAGNOSTIC) || defined(_LKM)
#define MALLOC(space, cast, size, type, flags) \ (space) = (cast)malloc((u_long)(size), type, flags)
#define FREE(addr, type) free((caddr_t)(addr), type)
#else /* do not collect statistics */
#define MALLOC(space, cast, size, type, flags) do { \ register struct kmembuckets *kbp = &bucket[BUCKETINDX(size)]; \ long s = splimp(); \ if (kbp->kb_next == NULL) { \ (space) = (cast)malloc((u_long)(size), type, flags); \ } else { \ (space) = (cast)kbp->kb_next; \ kbp->kb_next = *(caddr_t *)(space); \ } \ splx(s); \} while (0)
#define FREE(addr, type) do { \ register struct kmembuckets *kbp; \ register struct kmemusage *kup = btokup(addr); \ long s = splimp(); \ if (1 << kup->ku_indx > MAXALLOCSAVE) { \ free((caddr_t)(addr), type); \ } else { \ kbp = &bucket[kup->ku_indx]; \ if (kbp->kb_next == NULL) \ kbp->kb_next = (caddr_t)(addr); \ else \ *(caddr_t *)(kbp->kb_last) = (caddr_t)(addr); \ *(caddr_t *)(addr) = NULL; \ kbp->kb_last = (caddr_t)(addr); \ } \ splx(s); \} while(0)
#endif /* do not collect statistics */
extern struct kmemstats kmemstats[];
extern struct kmemusage *kmemusage;
extern char *kmembase;
extern struct kmembuckets bucket[];
extern void *malloc __P((unsigned long size, int type, int flags));
extern void free __P((void *addr, int type));
#endif /* _KERNEL */
#endif // __ECOS
#if defined(__ECOS) && defined(_KERNEL)
extern void *cyg_net_malloc(u_long size, int type, int flags);
extern void cyg_net_free(caddr_t addr, int type);
#define MALLOC(space, cast, size, type, flags) \ (space) = (cast)cyg_net_malloc((u_long)(size), type, flags)
#define malloc(size, type, flags) cyg_net_malloc((u_long)size, type, flags)
#define FREE(addr, type) cyg_net_free((caddr_t)(addr), type)
#define free(addr, type) FREE(addr, type)
#endif
#endif /* !_SYS_MALLOC_H_ */
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?