1:创建了共享内存分为七个缓存区
2:向每个缓存区依次连续写入数据
3:采用memcpy的方法写入数据
那如何保证每一个缓存区不会内存溢出呢,就是如果保证缓存区写满了就不写了呢
假设7个缓存区是连续的地址,那么为什么要创建7个呢。
假设7个缓存区是非连续地址,那么memcpy肯定不会惯病,传入数据错误就会溢出。
那么缓存区是这么管理呢?每次写都从头memcpy,这样的话就可以封装memcpy。如下代码参考:
int cache_memcpy(int cache_num,void* base_p,int size)
{
if(cache_num == 1)
{
if (size <= CACHE_NO1_SIZE)
{
memcpy(CACHE_NO1_ADDR, base_p, size);
}
else
{
return -1;
}
}
else if (cache_num == 2)
{
/* code */
省略
}
}
假设,写入缓存区的人,不管写哪,就希望无脑写入。参考如下代码:
void *cache_return_addr;
int cache1_free_size;
void *cache1_addr;
void *cache_memcpy(void *base_p, int size)
{
/* 获取信号量,避免进程访问 */
if (size <= cache1_free_size)
{
cache1_free_size += size;
cache_return_addr = cache1_addr;
memcpy(cache1_addr, base_p, size);
cache1_addr += size;
return cache_return_addr;
}
else if (size <= cache2_free_size)
{
/* 省略 */
}
else
{
return -1;
}
}
想来想去,你的需求太模糊了。
这个需要用到线程锁吧?
共享内存每个缓冲区,要加互斥锁,防止并发访问,设置写入长度变量,控制写入数据量。如果是读出清除数据,则还要设置读出数据位置变量。