繁体   English   中英

如何在C ++中的共享内存中存储浮点向量的向量?

[英]How do I store a vector of float vectors in shared memory in C++?

我需要在C ++的共享内存中存储浮点向量的向量。 我有一个有效的玩具示例,用于在共享内存中存储整数。 这是代码:

int main()
{
    int pid;
    int start = 0;
    int shmid;
    key_t key;
    key = 123;
    int *shm;

    if ((shmid = shmget(key, sizeof(int), IPC_CREAT | 0666)) < 0)
    {
        perror("shmget");
        exit(1);
    }   

    shm = (int *) shmat(shmid, NULL, 0);

    pid = fork();

    if (pid > 0)
    {   
        wait(NULL);
        cout << *shm << *(shm+1);
    }   
    else if (pid == 0)
    {    
        *shm = 6;
        *(shm+1) = 7;
    }   
    else
    {
        exit(-1);
    }   

    cout << endl;
    return 0;
}  

但是,据我了解,使用数据类型vector>而不是简单的整数要困难得多。 我是否需要编写一个自定义的分配器(如果是,是否有任何简单的方法来执行此操作?我发现的示例都非常复杂...)才能完成此工作,或者此示例是否有简单的扩展?那可以让我在共享内存中放置一个vector>?

无法将std::vector<T>存储在共享内存区域中,因为矢量内的实际元素未存储在std::vector<T>的内存中,而是分配在堆上。

从技术上讲,您可以构造自己的allocator ,但是我认为简单地序列化向量的内容会更容易。

像这样:

vector<float> vec_f;
// some code fills vec_f .. 
float *shm;
shm = (float *) shmat(shmid, NULL, 0);

for(auto f : vec_f)
{
   *shm++ = f;
}

(或者,如果您不想使用C ++样式迭代)

for(size_t i = 0; i < vec_f.size(); i++)
{
    *shm++ = vec_f[i];
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM