extend OS-level allocation interface with malloc_dirty_pages

svn: r5517
This commit is contained in:
Matthew Flatt 2007-01-31 05:09:53 +00:00
parent ebb8d0f39a
commit c8cab191a0
4 changed files with 22 additions and 3 deletions

View File

@ -24,7 +24,7 @@
static int page_size; /* OS page size */ static int page_size; /* OS page size */
static void *malloc_pages(size_t len, size_t alignment) static void *malloc_dirty_pages(size_t len, size_t alignment)
{ {
void *r; void *r;
size_t extra = 0; size_t extra = 0;
@ -52,6 +52,14 @@ static void *malloc_pages(size_t len, size_t alignment)
return r; return r;
} }
static void *malloc_pages(size_t len, size_t alignment)
{
void *p;
p = malloc_dirty_pages(len, alignment);
memset(p, 0, len);
return p;
}
static void system_free_pages(void *p, size_t len) static void system_free_pages(void *p, size_t len)
{ {
free(p); free(p);

View File

@ -116,6 +116,8 @@ static void *malloc_pages(size_t len, size_t alignment)
return r; return r;
} }
#define malloc_dirty_pages(size,align) malloc_pages(size,align)
static void system_free_pages(void *p, size_t len) static void system_free_pages(void *p, size_t len)
{ {
if (munmap(p, len)) { if (munmap(p, len)) {

View File

@ -24,14 +24,13 @@
# define CHECK_USED_AGAINST_MAX(x) /* empty */ # define CHECK_USED_AGAINST_MAX(x) /* empty */
#endif #endif
inline static void *malloc_pages(size_t len, size_t alignment) inline static void *malloc_dirty_pages(size_t len, size_t alignment)
{ {
void *p; void *p;
CHECK_USED_AGAINST_MAX(len); CHECK_USED_AGAINST_MAX(len);
p = smemalign(alignment, len); p = smemalign(alignment, len);
memset(p, 0, len);
ACTUALLY_ALLOCATING_PAGES(len); ACTUALLY_ALLOCATING_PAGES(len);
LOGICALLY_ALLOCATING_PAGES(len); LOGICALLY_ALLOCATING_PAGES(len);
@ -39,6 +38,14 @@ inline static void *malloc_pages(size_t len, size_t alignment)
return p; return p;
} }
inline static void *malloc_pages(size_t len, size_t alignment)
{
void *p;
p = malloc_dirty_pages(len, alignment);
memset(p, 0, len);
return p;
}
static void free_pages(void *p, size_t len) static void free_pages(void *p, size_t len)
{ {
free_used_pages(len); free_used_pages(len);

View File

@ -67,6 +67,8 @@ static void *malloc_pages(size_t len, size_t alignment)
PAGE_READWRITE); PAGE_READWRITE);
} }
#define malloc_dirty_pages(size,align) malloc_pages(size,align)
static void free_pages(void *p, size_t len) static void free_pages(void *p, size_t len)
{ {
LOGICALLY_FREEING_PAGES(len); LOGICALLY_FREEING_PAGES(len);