将元素添加到结构向量的全球向量中
Adding elements to global vector of vectors of structs
i具有此形式的构建式向量的全局向量:
vector<vector<stackEntry>> shadowStacksVector
想法是每个线程的vector<stackEntry>
。
在线程启动函数中我执行以下操作:
vector<stackEntry> sstack;
shadowStacksVector.push_back(sstack);
tdata->shadowStack = &(shadowStacksVector.back());
其中tdata
是包含线程本地存储的结构。我想做的是,对于每个线程,请参考堆栈条目的向量,以便每个线程可以将元素添加或删除到自己的堆栈中。从概念上讲,我相信push_back
会执行该元素的副本,因此我认为这应该可以起作用。但是,当我尝试添加/删除tdata->shadowStack
中的元素时,我的程序崩溃了。
在偏见上,如果我用这样的数组替换向量的向量:
vector<stackEntry> shadowStacksVector[256]
一切正常。
容器不是线程安全的,您需要创建代码的线程安全部分才能在多个线程中与它们一起使用。使用std::mutex
或std::atomic
创建代码的线程安全部分。
std::vector
和std::list
都不是线程安全。您的std::vector
可能失败,可能是因为当您按下新值时,其分配的内存可以进行重新分配,并且所有元素都可以在内存的其他部分移动,因此您的旧指针可以指向旧的损坏数据。如果您在开始向量向量的内存处使用shadowStacksVector->reserve
(max_internal_vectors_count(,当您进行push_back时,将不会重新定位,它可以保证std :: vector保留的内存用于max_internal_vectors_count和next Reallocate,并且在您将在您将push upl upher push_back_back_internal_vectors_vectors_count_count_count_count 1 emelts。>
std::list
不需要重新分配他的所有元素,因为它的元素可以存储在内存的不同部分,每次您进行push_back时,它都会为每个元素分配内存,因此旧的指针在同一内存位置上是指的。<<<<<<<<<<
- 将结构向量排序为子组
- 访问存储在向量C++中的结构的多态成员
- NLOHMANN 的 JSON 库将数组转换为结构向量
- 在nlohmann json中,如何将嵌套对象的数组转换为嵌套结构的向量
- 如何在 c++ 中创建结构向量的映射
- 带unique_ptr的结构向量
- C++ - 如何在结构向量中找到结构体一个成员的最大值?
- C++,从文件读取到结构,然后读取到向量(结构被推入向量太多次,而不仅仅是一次)
- 将 int 映射到 C++ 中的向量结构
- 如何在 c++ 中的向量结构中使用结构向量
- 无法将值存储到向量结构中
- 无法将.CSV文件读取为代表向量结构的类
- MPI,C,派生类型,向量结构
- 向量结构的打印成员
- 在 c++ 中对向量<结构 S> 进行二分搜索?
- 不需要删除向量<结构A*>
- 在C++中循环向量结构<string>
- 将字符串放入字符串的向量结构中
- 共享内存中的向量结构
- 我的向量结构没有像预期的那样迭代