1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71
|
/*
FALCON - The Falcon Programming Language.
FILE: heap_posix.cpp
Class for heap management - system specific for POSIX compliant
systems.
-------------------------------------------------------------------
Author: Giancarlo Niccolai
Begin: Sat, 13 Dec 2008 13:45:59 +0100
-------------------------------------------------------------------
(C) Copyright 2008: the FALCON developers (see list in AUTHORS file)
See LICENSE file for licensing details.
*/
/** \file
Class for heap management - system specific for POSIX compliant
systems.
*/
#include <falcon/heap.h>
#include <falcon/fassert.h>
#include <unistd.h>
#include <sys/mman.h>
// For BSD
#ifndef MAP_ANONYMOUS
# define MAP_ANONYMOUS MAP_ANON
#endif
namespace Falcon
{
static int s_pageSize;
HeapMem Heap;
HeapMem::HeapMem()
{
s_pageSize = sysconf( _SC_PAGESIZE );
}
HeapMem::~HeapMem()
{
}
namespace Sys {
int sys_pageSize()
{
return s_pageSize;
}
void *sys_allocPage()
{
void *ret = mmap(((char *)0), s_pageSize, PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANONYMOUS, -1, 0);
fassert( ret != MAP_FAILED );
return ret;
}
void sys_freePage( void *page )
{
munmap( (char*) page, s_pageSize );
}
}
}
/* end of heap_posix.cpp */
|