XINU
|
ヒープ領域を割り当て、最下位のワードアドレスを返す。 More...
#include <xinu.h>
Go to the source code of this file.
Functions | |
char * | getmem (uint32 nbytes) |
ヒープ領域を割り当て、最下位のワードアドレスを返す。 More... | |
ヒープ領域を割り当て、最下位のワードアドレスを返す。
Definition in file getmem.c.
char* getmem | ( | uint32 | nbytes | ) |
ヒープ領域を割り当て、最下位のワードアドレスを返す。
Step1. 割り込みを禁止する。
Step2. 要求されたメモリのByte数が0の場合は、割り込み状態を復元し、処理を終了する。
Step3. 要求されたメモリのByte数を8の倍数で丸める。
Step4. フリーメモリリスト先頭の次のブロックから順番に、最適なメモリブロック探索を始める。
メモリブロック探索では、以下の3通りいずれかを行う。
・現在のメモリブロックがユーザの要求サイズと一致する場合、そのメモリブロックを返す。
・ユーザの要求よりメモリブロックサイズが大きい場合、必要なメモリブロックサイズ分だけを返す。
・ユーザの要求よりメモリブロックサイズが小さい場合、次のメモリブロックを探索対象とする。
メモリブロック提供時は、フリーメモリリストを連結し直し、メモリブロック合計サイズから提供サイズ分を引く。
また、割り込み状態を許可状態に復元する。
[in] | nbytes | 必要なメモリサイズ(Byte) |
Definition at line 25 of file getmem.c.
References disable(), memlist, memblk::mlength, memblk::mnext, NULL, restore(), roundmb, and SYSERR.
Referenced by ethinit(), mkbufpool(), ptinit(), and rdsinit().