00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00020 #ifndef flc_HEAP_LINUX_H
00021 #define flc_HEAP_LINUX_H
00022
00023 #include <unistd.h>
00024 #include <falcon/fassert.h>
00025
00029 #define PAGE_SIZE 4096
00030
00031
00032 namespace Falcon {
00033
00034 class HeapMem_Linux
00035 {
00036 static long m_pageSize;
00037
00038 public:
00039
00040
00041
00042
00043
00044
00045
00046
00047
00048
00049 static void *getPage() { return getPages(1); }
00050
00051 static void *getPages( int pages )
00052 {
00053
00054 void *ret = mmap(((void *)0), pages * PAGE_SIZE, PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANONYMOUS, -1, 0);
00055 fassert( ret != MAP_FAILED );
00056 return ret;
00057 }
00058
00059 static void freePage( void *memory ) { free( memory, 1 ); }
00060 static void free( void *memory, int pages )
00061 {
00062
00063 munmap( memory, pages * PAGE_SIZE );
00064 }
00065
00066
00067
00068 static long pageSize() { return PAGE_SIZE; }
00069 };
00070
00071 typedef HeapMem_Linux HeapMem;
00072
00073 }
00074
00075 #endif
00076
00077