【问题标题】:Storing data in QSharedMemory在 QSharedMemory 中存储数据
【发布时间】:2026-02-04 05:15:02
【问题描述】:

我正在尝试在共享内存中存储四个“双”变量和一个“整数”变量。

QSharedMemory::data() 提供了一个指向由create(int size) 预留的内存的指针。我的问题是:我怎样才能适当地将数据加入并深度复制到共享内存中,以便我可以访问另一个程序上的任何元素以进行读/写?

我看到的唯一类似的事情是将值放在QString 中。这样做对吗?

谢谢。

【问题讨论】:

    标签: c++ qt qsharedmemory


    【解决方案1】:

    类似的东西:

    struct SharedData {
      double fourDoubles[4];
      int andAnInt;
    };
    
    QSharedMemory shared_mem;
    shared_mem.create(sizeof(SharedData));
    SharedData* p = static_cast<SharedData*>(shared_mem.data());
    p->fourDoubles[0] = 1.0;
    p->andAnInt = 42;
    

    【讨论】:

    • 不会因为填充而为结构返回40 吗?在 64 位机器上,4 个双精度 + 一个 int 将给出 36 的大小。
    • 您先生,真是个天才!我使用相同的静态转换从另一个实例中读取数据。如此简单:D
    • @RawN 还有...?我不太确定你在开什么车。 sizeof(SharedData) 的确切值对任何事物(无论是 36 或 40 还是其他)有何影响?
    • @IgorTandetnik OP 想要为四个双精度和一个 int 而不是结构保留内存。您的create 为 40 的结构保留空间。