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

📄 in_malloc.h

📁 自已写的一个嵌入式实时多任务抢占式操作系统。花了几个礼拜
💻 H
字号:
#include "rtosstub.h"

#define MALLERR(a) if (!__no_malloc_warning) _lib_lib_error(2,a,sizeof(a)-1)

#define SBUSY	0x42555359	/* 'BUSY' */
#define SFREE	0x46524545	/* 'FREE' */
#define SDUMY	0x44554d59	/* 'DUMY' */

#define BOFFSET	offsetof(struct node,u.buf)
#define ALIGN	BOFFSET
#define MINSZ	(sizeof(struct node)-BOFFSET)
#define DOALIGN(a,b) (((a) + (b)-1) & ~((b)-1))

#define ISBUSY(p) ((p)->status == SBUSY)
#define ISFREE(p) ((p)->status == SFREE)
#define ISDUMMY(p) ((p)->status == SDUMY)
#define SETBUSY(p) ((p)->status = SBUSY)
#define SETFREE(p) ((p)->status = SFREE)
#define SETDUMMY(p) ((p)->status = SDUMY)
#define SETCLEAR(p) ((p)->status = 0)
#define NEXT(p) ((p)->next)
#define SIZE(p) ((char *)(p->next)-p->u.buf)
#define SIZE2(p,n) ((char *)(n)-p->u.buf)

typedef struct node *NP;

struct node {
	NP	next;		/* next node in mem		*/
	long	status;		/* status number for checking	*/
	union {
		char	buf[4];	/* buffer if BUSY (4 is a dummy)*/
		struct {
			NP next;/* free list			*/
			NP prev;
		} free;
		long double	align;	/* use correct alignment	*/
	} u;
};

#if 1				/* make Delete a macro */
#define Delete(ptr) { \
			ptr->u.free.prev->u.free.next = ptr->u.free.next; \
			ptr->u.free.next->u.free.prev = ptr->u.free.prev; \
		    }
#else
static Delete(NP ptr)		/* Delete block from freetab */
{
	ptr->u.free.prev->u.free.next = ptr->u.free.next;
	ptr->u.free.next->u.free.prev = ptr->u.free.prev;
}
#endif

typedef struct {		/* mallopt junk				*/
	int	avail;		/* total available blocks		*/
	int	used;		/* total used blocks			*/
} __m_hold;

extern __m_hold *__small_mall ;

extern	int	__m_mxfast;	/* max size for "fast" allocation	*/
extern	int	__m_grain;	/* alignment of m_mxfast		*/
extern	int	__m_nlblks;	/* number of blocks in each holding blk	*/
extern	int	__m_keep;	/* "safe" malloc			*/

extern	struct node __freeptr;
extern	long __brk_tot;
extern	NP __brk_start;

extern int __malloc_check ;
extern int __no_malloc_warning;

extern _lib_mutex __malloc_mutex;

bool __malloc_check_fn(void) ;
void __mallopt_fix(size_t size, int inc_flag) ;
void __insert(NP ptr) ;		/* insert block in freetab */

⌨️ 快捷键说明

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