[RTT例程练习] 3.2 动态内存管理之rt_realloc和free
来源:互联网 发布:网络组网技术 编辑:程序博客网 时间:2024/06/05 05:35
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: 0x20000c58memory realloc success!memory free success!get memory: 0x20000c58memory realloc success!memory free success!get memory: 0x20000c58memory realloc success!memory free success!get memory: 0x20000c58memory realloc success!memory free success!get memory: 0x20000c58memory realloc success!memory free success!get memory: 0x20000c58memory realloc success!memory free success!get memory: 0x20000c58memory realloc success!memory free success!get memory: 0x20000c58memory realloc success!memory free success!get memory: 0x20000c58memory realloc success!memory free success!get memory: 0x20000c58memory realloc success!memory free success!
- [RTT例程练习] 3.2 动态内存管理之rt_realloc和free
- [RTT例程练习] 3.1 动态内存管理之rt_malloc和rt_free
- [RTT例程练习] 3.3 静态内存管理,内存池mempool
- [RTT例程练习] 4.2 动态定时器
- [RTT例程练习] 2.2 信号量之基本使用(动态/静态信号量)
- [RTT例程练习] 1.1 动态线程创建,删除
- [RTT例程练习] 1.7 优先级翻转之优先级继承
- [RTT例程练习] 总目录
- 内存管理之malloc和free
- [RTT例程练习] 1.3 线程让出
- [RTT例程练习] 1.4 线程优先级抢占
- [RTT例程练习] 2.6 互斥锁 mutex
- [RTT例程练习] 2.7 邮箱 mailbox
- [RTT例程练习] 2.9 事件机制event
- [RTT例程练习] 4.1 定时器基本使用
- [RTT例程练习] 4.4 定时器控制
- RTT学习笔记之内存管理(动态内存)
- C的动态内存管理--mallac()和free()
- android实现上传大文件到服务器(socket)
- width、margin-left、margin-right使用auto
- 用Python做归并排序
- Eclipse注释模板与规范
- 算法导论 2-3-7 习题
- [RTT例程练习] 3.2 动态内存管理之rt_realloc和free
- 12个球称3次
- HDU 2095
- Microsoft Office Professional Plus 2010 在安装过程中出现错误的解决方案
- 中国进入“扒粪时代”
- HDU 1062 - Text Reverse
- 卸载重装Bluestacks安卓模拟器
- 算法 选择
- 编写基于DirectShow流媒体播放器程序可以值得参考的资料和源码例子