示例#1
0
static ChunkArenaPtr
findArena()
{
    ChunkArenaPtr arena = NULL;
    int i;

    for(i = 0; i < numArenas; i++) {
        arena = &(chunkArenas[i]);
        if(arena->bitmap != 0)
            break;
        else
            arena = NULL;
    }

    assert(arena != NULL);

    if(!arena->chunks) {
        void *p;
        p = alloc_arena(CHUNK_SIZE * ARENA_CHUNKS);
        if(p == MAP_FAILED) {
            do_log_error(L_ERROR, errno, "Couldn't allocate chunk");
            maybe_free_chunks(1, 1);
            return NULL;
        }
        arena->chunks = p;
    }
    return arena;
}
示例#2
0
void MemoryManager::_alloc_arena(size_t size)
{
    _numArenas++;
    _bytes_arena += size;
    _arena = alloc_arena(_arena,size);
    assert(((POINTER_SIZE_INT)_arena->next_byte & BITS_TO_CLEAR) == 0);

#ifdef JIT_MEM_CHECK
    checkPointsMutex.lock();
    checkPointsByArena[_arena] = new std::vector<size_t>();
    checkPointsMutex.unlock();
    size_t allocated_size = _arena->last_byte - _arena->bytes; 
    memset(_arena->bytes, JIT_MEM_CHECK_DEFAULT_VAL, allocated_size);
#endif

}
示例#3
0
文件: sim_tests.c 项目: mboeh/spackt
char* test_arena()
{
    sp_arena* arena = alloc_arena();
    sp_block_template tmpl;
    sp_block* bl1 = NULL;
    sp_block* bl2 = NULL;
    sp_placement* pl = NULL;
    sp_arena_state* st = NULL;

    tmpl.visual = 7;
    tmpl.w = 3;
    tmpl.h = 4;

    mu_assert(arena, "arena is allocated");
    mu_assert(bl1 = new_block(&tmpl), "block 1");
    mu_assert(bl2 = new_block(&tmpl), "block 2");

    block_add_quality(bl1, B_QUALITY_RECEIVES(SP_EVT_DUMMY, 1));
    
    pl = arena_place(arena, bl1, 5, 6);
    mu_assert(pl, "placement");
    mu_assert(arena_place(arena, bl1, 5, 6) == NULL, "double placement fails");
    mu_assert(arena_place(arena, bl2, 5, 6), "other placement");

    arena_consume_event(arena, new_sp_event(SP_EVT_DUMMY, 1));
    mu_assert(block_has_quality(bl1, B_QUALITY_RECEIVES(SP_EVT_DUMMY, 2)), "events are dispatched"); 

    st = arena_export_state(arena);
    mu_assert(st->n_blocks == 2, "two blocks in state");
    mu_assert(st->blocks[0].w == 3, "w size is correct");
    mu_assert(st->blocks[0].h == 4, "h size is correct");
    mu_assert(st->blocks[0].x == 5, "x location is correct");
    mu_assert(st->blocks[0].y == 6, "y location is correct");
    mu_assert(st->blocks[0].visual == 7, "visual is correct");

    mu_assert(arena_remove(arena, pl) == bl1, "removal works");
    mu_assert(arena_remove_block(arena, bl1) == NULL, "double removal fails");
    mu_assert(arena_remove_block(arena, bl2) == bl2, "removal by block successful");

    SPFREE(arena);
    SPFREE(bl1);
    SPFREE(bl2);
    SPFREE(st);

    return NULL;
}