Object allocate(size_t size) { Object object(mbmalloc(size), size, random()); for (size_t i = 0; i < size / sizeof(long); ++i) (static_cast<long*>(object.pointer))[i] = object.uuid; return object; }
void Interpreter::doMallocOp(Op op, ThreadId threadId) { switch (op.opcode) { case op_malloc: { m_objects[op.slot] = { mbmalloc(op.size), op.size }; assert(m_objects[op.slot].object); bzero(m_objects[op.slot].object, op.size); break; } case op_free: { if (!m_objects[op.slot].object) return; mbfree(m_objects[op.slot].object, m_objects[op.slot].size); m_objects[op.slot] = { 0, 0 }; break; } case op_realloc: { if (!m_objects[op.slot].object) return; m_objects[op.slot] = { mbrealloc(m_objects[op.slot].object, m_objects[op.slot].size, op.size), op.size }; break; } case op_align_malloc: { size_t alignment = compute2toPower(op.alignLog2); m_objects[op.slot] = { mbmemalign(alignment, op.size), op.size }; assert(m_objects[op.slot].object); bzero(m_objects[op.slot].object, op.size); break; } default: { fprintf(stderr, "bad opcode: %d\n", op.opcode); abort(); break; } } }
void* operator new(size_t size) { return mbmalloc(size); }