📄 malloc.h
字号:
"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 */ \ NULL, NULL, \ NULL, NULL, NULL, NULL, NULL, \ NULL, NULL, NULL, NULL, NULL, \ NULL, NULL, NULL, NULL, NULL, \ NULL, NULL, NULL, NULL, NULL, \ "dmamap", /* 126 M_DMAMAP */ \ "temp", /* 127 M_TEMP */ \}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])#ifdef PMON/* * To avoid mixup with pmon libc malloc rename kernel malloc * and free to kern_malloc and kern_free. */#define malloc kern_malloc#define free kern_freetypedef struct vm_map *vm_map_t;vm_offset_t kmem_malloc __P((vm_map_t, vm_size_t, int));vm_map_t kmem_suballoc __P((vm_map_t, vm_offset_t *, vm_offset_t *, vm_size_t, int));vm_offset_t kmem_alloc __P((vm_map_t, vm_size_t));void kmem_free __P((vm_map_t, vm_offset_t, vm_size_t));#endif/* * 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 /* !_SYS_MALLOC_H_ */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -