共享内存如果保证不会内存溢出

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;
    }
}

想来想去,你的需求太模糊了。

这个需要用到线程锁吧?

共享内存每个缓冲区,要加互斥锁,防止并发访问,设置写入长度变量,控制写入数据量。如果是读出清除数据,则还要设置读出数据位置变量。