kangjianjiankang
2020-06-19 12:29
采纳率: 50%
浏览 177

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

1:创建了共享内存分为七个缓存区

2:向每个缓存区依次连续写入数据

3:采用memcpy的方法写入数据

那如何保证每一个缓存区不会内存溢出呢,就是如果保证缓存区写满了就不写了呢

  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

3条回答 默认 最新

  • 人在旅途~ 2020-06-19 14:24
    已采纳

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

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

    打赏 评论
  • zh_fubo 2020-06-19 16:19

    这个需要用到线程锁吧?

    打赏 评论
  • poplar_ha 2020-06-21 09:01

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

    打赏 评论

相关推荐 更多相似问题