void * __cdecl ph_realloc(void *p,size_t nbytes) { //dbg_printf("ph_realloc(%p,%d)\n",p,nbytes); if (!p) return ph_malloc(nbytes); if (!nbytes) { ph_free(p); return NULL; } void *newp = ph_malloc(nbytes); if (newp) { unsigned oldsize = ((unsigned *)p)[-1]; memcpy(newp,p,oldsize); ph_free(p); } return newp; }
/* * . */ int main(int argc, char *argv[]) { PheapIndex* idx; Klass* klass; Klass* klass2; Symbol* symbol; idx = PheapIndex::instance(); if (ph_isnew()) { klass = new Klass; printf("klass=%p\n", klass); klass2 = new Klass; printf("klass2=%p\n", klass2); char* class_name = (char*) ph_malloc(3); strcpy(class_name, "AB"); klass->set_class_name(class_name); char* k_n = klass->get_class_name(); printf("class name: %s\n", k_n); symbol = new Symbol; char* symbol_name = (char*) ph_malloc(3); strcpy(symbol_name, "BC"); symbol->set_name(symbol_name); klass->set_symbol(symbol); idx->add_klass(class_name, klass); idx->add_klass(symbol_name, klass2); // test heap limits while (1) { ph_malloc(1024); } } else { klass = idx->get_class((char*)"AB"); if (klass == NULL) printf("Klass not found!"); char* k_n = klass->get_class_name(); printf("class name: %s\n", k_n); printf("symbol name: %s\n", klass->get_symbol()->get_name()); klass2 = idx->get_class((char*)"BC"); } ph_close(); }
void *ph_calloc(size_t nbytes) { void *p; p = ph_malloc(nbytes); return p ? memset(p,0,nbytes) : p; }