1 引言
定长数组包
在平时的开发中,缓冲区数据收发时,如果采用缓冲区定长包,假定大小是 1k,MAX_LENGTH 为 1024。结构体如下:
// 定长缓冲区
//公众号:c语言与cpp编程
struct max_buffer
{
int len;
char data[MAX_LENGTH];
};
数据结构的大小 >= sizeof(int) + sizeof(char) * MAX_LENGTH 为了防止数据溢出的情况,data 的长度一般会设置得足够大,但也正是因为这样,才会导致数组的冗余。
假如发送 512 字节的数据, 就会浪费 512 个字节的空间, 平时通信时,大多数是心跳包,大小远远小于 1024,除了浪费空间还消耗很多流量。
内存申请:
if ((m_buffer = (struct max_buffer *)malloc(sizeof(struct max_buffer))) != NULL)
{
m_buffer->len = CUR_LENGTH;
memcpy(m_buffer->data, "max_buffer test", CUR_LENGTH);
printf("%d, %s\n", m_buffer->len, m_buffer->data);
}
内存释放:
free(m_buffer);
m_buffer = NULL;
指针数据包<