【问题标题】:Allocate memory for a pointer to vector of structs为指向结构向量的指针分配内存
【发布时间】:2021-12-26 13:24:10
【问题描述】:

我有一个结构 PWS:

struct PWS{
    uint64_t key;
    char* value;
    uint64_t timestamp;
    uint64_t txn_id;
};

我想创建一个指向 PWS 向量的指针,以便稍后在我的代码中填充它。这种方式正确吗?

int total_no_of_items = 100000;
vector<PWS> * pws = (vector<PWS>*) _mm_malloc(sizeof(vector<PWS>*) * total_no_of_items, 0);

【问题讨论】:

    标签: c++ vector struct malloc


    【解决方案1】:

    很遗憾,这是不正确的。您将 100000 个未初始化的 指针 分配给 vector&lt;PWS&gt;,而不是结构向量。如果你想分配一个结构向量,那么简单:

    vector<PWS> pws(total_no_of_items);
    

    如果您希望向量本身是堆分配的(无论出于什么奇怪的原因),那么就是:

    unique_ptr<vector<PWS>> pws(new vector<PWS>(total_no_of_items));
    

    还不清楚您为什么要尝试使用_mm_malloc。如果您的目标是使用一些 SIMD 指令加载您的结构,那么您应该在结构上指定对齐方式:

    struct alignas(16) PWS { ... }; // aligned for xmm
    

    std::vector 的分配器会处理剩下的事情。

    【讨论】:

      猜你喜欢
      • 2015-07-04
      • 2018-05-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-02-23
      • 2013-04-18
      • 1970-01-01
      • 2012-02-07
      相关资源
      最近更新 更多