示例#1
0
int main(int argc, char *argv[])
{
  dynmem_init(&Dm);
  dynmem_add_pool(&Dm, Memory1, sizeof(Memory1));
  tlsf_init(&Tlsf);
  tlsf_add_pool(&Tlsf, Memory2, sizeof(Memory2));

  printf("\n\n");
  HEAD
  TEST(free(malloc(16)))
  TEST(free(malloc(200)))
  TEST(free(malloc(550)))
  TEST(free(malloc(65536)))
  TEST(free(malloc(65586)))
  TEST(dynmem_free(&Dm, dynmem_malloc(&Dm, 16)))
  TEST(dynmem_free(&Dm, dynmem_malloc(&Dm, 200)))
  TEST(dynmem_free(&Dm, dynmem_malloc(&Dm, 550)))
  TEST(dynmem_free(&Dm, dynmem_malloc(&Dm, 65536)))
  TEST(dynmem_free(&Dm, dynmem_malloc(&Dm, 65586)))
  TEST(tlsf_free(&Tlsf, tlsf_malloc(&Tlsf, 16)))
  TEST(tlsf_free(&Tlsf, tlsf_malloc(&Tlsf, 200)))
  TEST(tlsf_free(&Tlsf, tlsf_malloc(&Tlsf, 550)))
  TEST(tlsf_free(&Tlsf, tlsf_malloc(&Tlsf, 65536)))
  TEST(tlsf_free(&Tlsf, tlsf_malloc(&Tlsf, 65586)))

  return 0;
}
示例#2
0
void free(void *ptr)
{
  if(ptr == NULL)
    return;
  const int bs = tlsf_block_size(ptr);

  if(bs >= 65536) {
    const int p = (intptr_t)ptr;

    const int np = ROUND_UP(p, 65536);
    int s = bs - (np - p);
    if(s > 0) {
      s &= ~0xffff;
      if(s > 0) {
#if 0
	tracelog(TRACE_NO_PROP, TRACE_DEBUG, "MEMORY",
	      "free(%p+%d) == page_free(0x%x+%d)",
	      ptr, bs, np, s);
#endif
#ifdef USE_VIRTUAL_MEM
	if(Lv2Syscall2(308, np, s))  // Invalidate
	  tracelog(TRACE_NO_PROP, TRACE_ERROR, "MEMORY",
		"Invalidate failed");
	if(Lv2Syscall2(310, np, s))  // Sync
	  tracelog(TRACE_NO_PROP, TRACE_ERROR, "MEMORY",
		"Sync failed");
#endif
      }
    }
  }
  hts_lwmutex_lock(&mutex);
  tlsf_free(gpool, ptr);
  hts_lwmutex_unlock(&mutex);
}
示例#3
0
static ssize_t proc_write(struct file *filp, const char __user *buff,
			unsigned long len, void *data)
{
	unsigned int page_no = 0, clen = 0;
	unsigned long used_size;
	
	if (copy_from_user(&buffer, buff, len)) {
		pr_info("Error copying buffer from user: len=%lu\n", len);
		return -EFAULT;
	}
	//pr_info("buffer=[%s]\n", buffer);
	sscanf(buffer, "%u %u", &page_no, &clen);

	//temp
	//buffer[len] = '\0';

	if (table[page_no])
		tlsf_free(table[page_no], mem_pool);
	if (!(table[page_no] = tlsf_malloc(clen, mem_pool)))
		pr_info("Error allocating mem for page: %u\n", page_no);
	used_size = (unsigned long)tlsf_get_used_size(mem_pool);

	count++;
        //spin_lock(&write_lock);
	//sprintf(buffer, "%lu\n", used_size);
	sprintf(buffer, "%lu %lu %lu\n", count, used_size, used_size >> 10);
	relay_write(relay, buffer, strlen(buffer));
        //relay_write(relay, &used_size, sizeof(unsigned long));
        //spin_unlock(&write_lock);
	return len;
}
示例#4
0
static void g_free(void *ptr)
{
    if (memory_pool <= ptr && ptr < memory_pool_end)
        tlsf_free(memory_pool, ptr);
    else
        ::free(ptr);
}
示例#5
0
文件: tlsf-malloc.c 项目: mali/RIOT
/**
 * Deallocate a block of data.
 */
void free(void *ptr)
{
    unsigned old_state = irq_disable();

    tlsf_free(gheap, ptr);
    irq_restore(old_state);
}
示例#6
0
void kfree(void *ptr)
{
    uint32_t flags;

    save_flags_cli(flags);
    tlsf_free(g_kheap, ptr);
    restore_flags(flags);
}
示例#7
0
void myfree(void *ptr)
{
  if(ptr == NULL)
    return;
  hts_lwmutex_lock(&mutex);
  tlsf_free(gpool, ptr);
  hts_lwmutex_unlock(&mutex);
}
示例#8
0
//----------------------------------------------------------------//
void zipfs_free ( void* ptr ) {

	if ( sTlsfPool ) {
		tlsf_free ( sTlsfPool->mPool, ptr );
	}
	else {
		free ( ptr );
	}
}
示例#9
0
void simFree(u64 location)
{
	void *ptr = (void *)((size_t)location);

	countFree++;

	tlsf_free(ptr, pool);

	showStats(pool);
}
示例#10
0
void _free_impl(void* ptr, int krn)
{
	if (krn == 1){	// kernel
		if (tlsf_check_pool(kernel_heap))
			krn_debugLogf("TLSFk: check failed");
		tlsf_free(kernel_heap, ptr);
		if (tlsf_check_pool(kernel_heap))
			krn_debugLogf("TLSFk: check failed");
		//show_mem_info(kernel_heap, 1);
	} else {		// processes
		void* heapStart = sdk_prc_getHeapPointer();		
		if (tlsf_check_pool(heapStart))
			krn_debugLogf("TLSFa: check failed");
		tlsf_free(heapStart, ptr);
		if (tlsf_check_pool(heapStart))
			krn_debugLogf("TLSFa: check failed");
		//show_mem_info(kernel_heap, 0);
	}
}
示例#11
0
static void __exit tlsf_kmod_exit(void)
{
	unsigned long entry;
	remove_proc_entry("tlsf_test", &proc_root);
	relay_close(relay);
	for (entry = 0; entry < MAX_SWAP_SIZE / PAGE_SIZE; entry++)
		if (table[entry])
			tlsf_free(table[entry], mem_pool);
	vfree(table);
	tlsf_destroy_memory_pool(mem_pool);
}
示例#12
0
void AllocatorTLSF_Impl::Deallocate(void* _Pointer)
{
	if (_Pointer)
	{
		size_t blockSize = tlsf_block_size(_Pointer);
		tlsf_free(hPool, _Pointer);
		Stats.NumAllocations--;
		Stats.BytesAllocated -= blockSize;
		Stats.BytesFree += blockSize;
	}
}
示例#13
0
static void *l_alloc (void *ud, void *ptr, size_t osize,
                                            size_t nsize) {
  void* ret = 0;
   (void)osize;  /* not used */
   if (nsize == 0) {
    //terminal_writeln("");
     tlsf_free(ud, ptr);
     return NULL;
   }
   else {
    if(ptr == 0) {
      ret = tlsf_malloc(ud, nsize);
      //terminal_writehexln(ret);
      return ret;
    }else{
      void* new_mem = tlsf_malloc(ud, nsize);
      memcpy(new_mem, ptr, osize);
      tlsf_free(ud, ptr);
      //terminal_writehexln(new_mem);
      return new_mem;
    }
   }
 }
示例#14
0
bool Allocator::lowMemory(unsigned n, size_t chunk_size)
{
    //This should stay on the stack
    void *buf[n];
    for(unsigned i=0; i<n; ++i)
        buf[i] = tlsf_malloc(impl->tlsf, chunk_size);
    bool outOfMem = false;
    for(unsigned i=0; i<n; ++i)
        outOfMem |= (buf[i] == nullptr);
    for(unsigned i=0; i<n; ++i)
        if(buf[i])
            tlsf_free(impl->tlsf, buf[i]);

    return outOfMem;
}
示例#15
0
文件: test.c 项目: Aborres/compcache
int main(void)
{
	void *mem, *pool;
	pool = tlsf_create_memory_pool(get_mem, put_mem,
				INIT_SIZE, MAX_SIZE, GROW_SIZE);
	mem = tlsf_malloc(4033, pool);
	if (mem == NULL) {
		printf("test: error allocating memory\n");
		return 0;
	}
	memset(mem, 0x0, 4033);
	tlsf_free(mem, pool);
	tlsf_destroy_memory_pool(pool);
	return 0;
}
示例#16
0
		void push_back(T const &e) {
			assert(toCopy <= used);
			assert(used < capacity);
			// Incrementally copy elements from container to nextContainer:
			if(toCopy <= (used - 1)) {
				nextContainer[toCopy] = container[toCopy];
				++toCopy;
			}
			// Actually push back new element to both containers:
			container[used] = e;
			nextContainer[used] = e;
			++used;
			if(used == capacity) {
				tlsf_free(static_cast< void * >(container));
				container = nextContainer;
				capacity *= 2;
				nextContainer = static_cast< T * >(tlsf_malloc(2 * capacity * sizeof(T)));
				toCopy = 0;
			}
		}
示例#17
0
static void *g_realloc(void *ptr, size_t osize, size_t size)
{
    void* p = NULL;

    if (ptr && size == 0)
    {
        g_free(ptr);
    }
    else if (ptr == NULL)
    {
        if (size <= 256)
            p = tlsf_malloc(memory_pool, size);

        if (p == NULL)
            p = ::malloc(size);
    }
    else
    {
        if (memory_pool <= ptr && ptr < memory_pool_end)
        {
            if (size <= 256)
                p = tlsf_realloc(memory_pool, ptr, size);

            if (p == NULL)
            {
                p = ::malloc(size);
                memcpy(p, ptr, osize);
                tlsf_free(memory_pool, ptr);
            }
        }
        else
        {
            p = ::realloc(ptr, size);
        }
    }

    return p;
}
示例#18
0
int heapobj_pkg_init_private(void)
{
	size_t size;
	void *mem;

	/*
	 * We want to know how many bytes from a memory pool TLSF will
	 * use for its own internal use. We get the probe memory from
	 * tlsf_malloc(), so that the main pool will be set up in the
	 * same move.
	 */
	mem = tlsf_malloc(__this_node.mem_pool);
	size = init_memory_pool(__this_node.mem_pool, mem);
	if (size == (size_t)-1)
		panic("cannot initialize TLSF memory manager");

	destroy_memory_pool(mem);
	tlsf_pool_overhead = __this_node.mem_pool - size;
	tlsf_pool_overhead = (tlsf_pool_overhead + 15) & ~15;
	tlsf_free(mem);

	return 0;
}
示例#19
0
void pvfree(void *ptr)
{
	tlsf_free(ptr);
}
示例#20
0
void Allocator::dealloc_mem(void *memory)
{
    //printf("dealloc_mem(%d)\n", tlsf_block_size(memory));
    tlsf_free(impl->tlsf, memory);
    //free(memory);
}
示例#21
0
void free(void *ptr) {
    tlsf_free(g_pool, ptr);
}
示例#22
0
void free(void *mem)
{
	tlsf_free(tlsf_mem_pool, mem);
}
void vPortFree( void *pv ){
	vTaskSuspendAll();
	tlsf_free(pv);
	xTaskResumeAll();
}
示例#24
0
			void  free( void* ptr )
			{
				tlsf_free( g_tlsfPool, ptr );
			}
示例#25
0
		virtual ~vector_const_tlsf() {
			tlsf_free(container);
			tlsf_free(nextContainer);
		}