c语言内存对其和内存碎片问题

lihao0320 lihao0320 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
cpu使用stm32f107,编译用keil,网络应用,要求在网络不通的时候储存有效数据,到一定程度循环存放,释放最老的数据包……
当初考虑过使用数组解决,但是因为每包数据长度不固定,使用数组也不是一个很好的办法;而且储存的数据多的时候使用数组处理起来更麻烦;使用此种方法是否会造成内存碎片及内存耗尽的情况?
struct LNODE
{

u16 buflen; //包长度
u8 ref; //包标志,为1说明该包需要发送
struct LNODE *next; //下包地址
u8 *payload; //该包未发送数据指针
}
*not_sent_bufs;
//缓存链表首地址

链表节点如上,payload为不定长数据包指针,其长度为buflen,为了避免内存碎片,想创建节点时把payload数据内存一并申请,即malloc(sizeof(struct LNODE)+buflen);同时payload指向数据区头部;可否如此
not_sent_bufs = malloc(sizeof(struct LNODE)+buflen);
not_sent_bufs ->payload = (unsigned char *)not_sent_bufs +sizeof(struct LNODE); //
memcpy(not_sent_bufs ->payload,sbuf,buflen); //拷贝数据
……
加入节点到链表
……
...全文

相关推荐

评论 73
收藏 已收藏
分享
返回顶部