Пример #1
0
 public static UInt32 GetFreeMem(HeapBlock* aBlock)
 {
     return aBlock->size - (aBlock->used * aBlock->bsize);
 }
Пример #2
0
 public static UInt32 GetUsedMem(HeapBlock* aBlock)
 {
     return (aBlock->used * aBlock->bsize);
 }
Пример #3
0
        public static int InitBlock(HeapBlock* b, UInt32 size, UInt32 bsize)
        {
            UInt32 bcnt;
            
            b->size = size - (UInt32)sizeof(HeapBlock);
            b->bsize = bsize;

            bcnt = size / bsize;
            byte* bm = (byte*)&b[1];

            /* clear bitmap */
            for (uint x = 0; x < bcnt; ++x)
            {
                bm[x] = 0;
            }

            /* reserve room for bitmap */
            bcnt = (bcnt / bsize) * bsize < bcnt ? bcnt / bsize + 1 : bcnt / bsize;
            for (uint x = 0; x < bcnt; ++x)
            {
                bm[x] = 5;
            }

            b->lfb = bcnt - 1;

            b->used = bcnt;
            b->next = null;
            
            return 1;
        }
Пример #4
0
        public static int AddBlock(HeapBlock* b)
        {
            EnterCritical("AddBlock");

            b->next = fblock;
            fblock = b;

            ExitCritical();

            return 1;
        }
Пример #5
0
 public static void Load(HeapBlock* heapPtr, SpinLock heapLock)
 {
     fblock = heapPtr;
     AccessLock = heapLock;
     AccessLockInitialised = (AccessLock != null);
 }