The following code:

import std.stdio, std.cstream, std.c.stdlib;

private {
        //import rescache.cache;
        //import mm.mempool;
}

void main(string[] args)
{
        // press <Return> before program begins
        din.getc();
        
        memoryPool memPool = new memoryPool(1024);
        writeln("Block Allocated!");
        
        // press <Return> to end program
        din.getc();
        //return cast(int)0;
}

        // Growable/shrinkable memory pool, for speedy memory allocation
        class memoryPool {
                private:
// Allocation header, count and keep track of allocs and keep first, last info
                        struct s_allocHeader {
                                int m_allocCount; // count number of 
allocations from pool
s_allocInfo* p_first; // pointer to first allocation info struct s_allocInfo* p_last; // pointer to last alloc info struct (should be null if only one)
                        }
                        // Keep track of allocations from the memory pool
                        struct s_allocInfo {
                                align(4) // align on 4-byte boundaries
                                void* p_data; // pointer to data chunk 
allocated out
void* p_inBlock; // pointer to block this allocation was made in
                                int m_dataSize; // size of allocated chunk
                                s_allocInfo* p_next; // pointer to next 
allocation list entry
                        }
                        
// Block header, count and keep track of system allocs and keep first, last info
                        struct s_blockHeader {
                                int m_blockCount; // count number of 
allocations from system
                                s_blockInfo* p_first; // pointer to first block 
info struct
s_blockInfo* p_last; // pointer to last block info struct (should be null if only one)
                        }
                        // Keep track of block allocations
                        struct s_blockInfo {
                                align(4) // align on 4-byte boundaries
void* p_block; // pointer to the memory allocated from the system
                                int m_blockSize; // size of block allocated 
from the system
bool m_poolMember; // whether or not the block was allocated for the memory pool
                                s_blockInfo* p_next; // pointer to next block 
list entry
                        }
                        
                        int m_CHUNK_SIZE = 128; // n-byte allocations from the 
pool
                        int m_BLOCK_SIZE = 4096; // pool block size
                
                public: 
                        // Allocator
                        //void* alloc(int numChunks = 1, bool useMemPool = 
true) { }
                        // Deallocator
                        void free() { }
                        // Grow the memory pool
                        void growPool(int numBlocks = 1) { }
                        // Shrink the memory pool
                        void shrinkPool(int numBlocks = 1) { }
                        
                        // Constructor; pass it the initial memory pool size in 
MB
                        this(int initialPoolSize) {
                                // set up allocation list
                                s_allocHeader* m_allocList;
                                // set up block list
                                s_blockHeader* m_blockList;
                                
// create initial block info reference, and set block count to 1
                                m_blockList.p_first = 
malloc(s_blockInfo.sizeof);
                                //m_blockList.m_blockCount = 1;
// allocate initial block of memory and store it in block info reference
                                //s_blockInfo* tmp = m_blockList.p_first;
                                //tmp.p_block = 
malloc(cast(size_t)initialPoolSize);
                                //tmp.m_blockSize = initialPoolSize;
                                //tmp.m_poolMember = true;
                                //tmp.p_next = null;
                        }
                        // Deconstructor
                        ~this() { }
        } // END of c_memoryPool class

when compiled, gives the error:

Error: cannot implicitly convert expression (malloc(16u)) of type void* to s_blockInfo*

on line (75):

m_blockList.p_first = malloc(s_blockInfo.sizeof);

What is going on here?

I even tried using new, but got an Access Violation

Any help would be appreciated.

Reply via email to