#include <malloc.h> #include <os/os.h> //! Requests a block of memory from the operating system. /*! * Because calls to the kernel are relatively expensive, libc requests memory * in large blocks, which malloc() splits up as needed. These blocks are * multiples of the host's page size and are automatically allocated by * malloc(). * * \param nu Size, in multiples of sizeof(BlockHeader), of the block to * allocate. This is rounded to PAGE_SIZE automatically, and increased * to four pages if smaller. * \return A pointer to the start of the block allocated. This block is also * added to the freed memory list. */ /* BlockHeader* morecore(size_t nu) { byte *cp; BlockHeader *up; dword bytes; extern BlockHeader* freep; bytes = ((nu * sizeof(BlockHeader)) + PAGE_SIZE) & -PAGE_SIZE; //if (bytes < PAGE_SIZE * 4) //bytes = PAGE_SIZE * 4; cp = vmmAlloc(bytes / PAGE_SIZE, NULL, MEM_COMMIT | MEM_USER | MEM_READ | MEM_WRITE); //wprintf(L"libc morecore: allocated %d pages at %p\n", bytes / PAGE_SIZE, cp); nu = bytes / sizeof(BlockHeader); up = (BlockHeader*) cp; up->s.size = nu; free((void*) (up + 1)); return freep; } */ char *sbrk(int size) { char *cp; size_t bytes; bytes = (size + PAGE_SIZE) & -PAGE_SIZE; cp = vmmAlloc(bytes / PAGE_SIZE, NULL, MEM_COMMIT | MEM_USER | MEM_READ | MEM_WRITE); return cp; } size_t getpagesize() { return PAGE_SIZE; }