[RTT例程练习] 3.2 动态内存管理之rt_realloc和free
2013-04-06 21:28
501 查看
realloc 用于重新分配内存的场景。如果原先通过 malloc分配的空间过小,则可通过realloc重新分配大小。当然具体实现的时候分两种情况,如果原内存块后有足够的空间,则之间将原内存块扩大,如果不够,则重新寻找一个地方,将原数据也拷贝至此。
代码:
结果:
代码:
#include <rtthread.h> struct rt_thread thread1; static rt_uint8_t thread1_stack[512]; void thread1_entry(void* parameter) { int i,j = 1; char *ptr[10]; /* 用于放置10个分配内存块的指针*/ /* 对指针清零*/ for (i = 0; i <10; i ++) ptr[i] = RT_NULL; while(j--) { for (i = 0; i <10; i++) { /* 每次分配(1 <<i)大小字节数的内存空间*/ ptr[i] = rt_malloc(10); /* 如果分配成功*/ if (ptr[i] != RT_NULL) { rt_kprintf("get memory: 0x%x\n", ptr[i]); rt_realloc(ptr[i],16); /* 如果分配成功*/ if (ptr[i] != RT_NULL) { rt_kprintf("memory realloc success!\n"); /* 释放内存块*/ rt_free(ptr[i]); rt_kprintf("memory free success!\n"); ptr[i] = RT_NULL; } } } } } int rt_application_init() { rt_thread_init(&thread1, "thread1", thread1_entry, RT_NULL, &thread1_stack[0], sizeof(thread1_stack), 10, 100); rt_thread_startup(&thread1); return 0; }
结果:
get memory: 0x20000c58 memory realloc success! memory free success! get memory: 0x20000c58 memory realloc success! memory free success! get memory: 0x20000c58 memory realloc success! memory free success! get memory: 0x20000c58 memory realloc success! memory free success! get memory: 0x20000c58 memory realloc success! memory free success! get memory: 0x20000c58 memory realloc success! memory free success! get memory: 0x20000c58 memory realloc success! memory free success! get memory: 0x20000c58 memory realloc success! memory free success! get memory: 0x20000c58 memory realloc success! memory free success! get memory: 0x20000c58 memory realloc success! memory free success!
相关文章推荐
- [RTT例程练习] 3.2 动态内存管理之rt_realloc和free
- [RTT例程练习] 3.1 动态内存管理之rt_malloc和rt_free
- [RTT例程练习] 3.1 动态内存管理之rt_malloc和rt_free
- [RTT例程练习] 2.1 问题引入 线程抢占导致的临界区问题
- [RTT例程练习] 6.3 在 Finsh 中查看自定义变量
- [RTT例程练习] 1.3 线程让出
- 动态内存管理详解:malloc/free/new/delete/brk/mmap
- C++动态内存管理,malloc,calloc,realloc和new,delete的讲解
- [RTT例程练习] 3.3 静态内存管理,内存池mempool
- [RTT例程练习] 2.2 信号量之基本使用(动态/静态信号量)
- 动态内存管理 :malloc ,calloc,realloc,柔性数组
- 结构体中动态内存的管理(malloc和free)
- [RTT例程练习] 3.3 静态内存管理,内存池mempool
- [RTT例程练习] 1.4 线程优先级抢占
- [RTT例程练习] 2.2 信号量之基本使用(动态/静态信号量)
- 动态内存分配的大家族之malloc calloc realloc free
- [RTT例程练习] 2.9 事件机制event
- [RTT例程练习] 4.1 定时器基本使用
- [RTT例程练习] 1.4 线程优先级抢占
- 动态内存管理详解:malloc/free/new/delete/brk/mmap