c语言内存对其和内存碎片问题
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); //拷贝数据
……
加入节点到链表
……