📄 alc_mem.c
字号:
/* ------------------------------------------------------------------------ */
/* Hyper Operating System V4 μITRON4.0慌屯 Real-Time OS */
/* カ〖ネルメモリ瓷妄 */
/* */
/* Copyright (C) 1998-2002 by Project HOS */
/* http://sourceforge.jp/projects/hos/ */
/* ------------------------------------------------------------------------ */
#include "knl_mem.h"
/* メモリの充り碰て */
VP kernel_alc_mem(
SIZE size) /* 艰评する挝拌のサイズ */
{
T_KERNEL_MEM_BLK *mblk;
T_KERNEL_MEM_BLK *mblk_next;
/* ヒ〖プの赂哼チェック */
if ( kernel_mem_base == NULL )
{
return NULL;
}
/* サイズのアライメントを拇腊 */
size = (size + MEMBLK_ALIGN - 1) & ~(MEMBLK_ALIGN - 1);
/* 鄂き挝拌を浮瑚 */
mblk = kernel_mem_base;
while ( mblk->size != 0 )
{
if ( mblk->flag == MEMBLK_FREE && mblk->size >= size )
{
/* 浇尸な推翁があったら */
if ( mblk->size - size > MEMBLKSIZE + MEMBLK_ALIGN )
{
/* ブロックを尸充する */
mblk_next = (T_KERNEL_MEM_BLK *)((UB *)mblk + MEMBLKSIZE + size);
mblk_next->prev = mblk;
mblk_next->size = mblk->size - size - MEMBLKSIZE;
mblk_next->flag = MEMBLK_FREE;
mblk->size = size;
}
mblk->flag = MEMBLK_USING;
return (VP)((UB *)mblk + MEMBLKSIZE);
}
/* 肌のブロックへ渴む */
mblk = (T_KERNEL_MEM_BLK *)((UB *)mblk + mblk->size + MEMBLKSIZE);
}
return NULL; /* 鄂きが痰い */
}
/* ------------------------------------------------------------------------ */
/* Copyright (C) 1998-2002 by Project HOS */
/* ------------------------------------------------------------------------ */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -