提问人:Chameleon 提问时间:11/14/2023 更新时间:11/14/2023 访问量:54
带有 #pragma pack(1) 的 struct 数组,还是 struct 字段的数组?[关闭]
array of struct with #pragma pack(1), or arrays of struct's fields? [closed]
问:
假设我们有一个非常大的稀疏矩阵的稀疏行向量。
稀疏向量的每个元素是:
#pragma pack(1)
struct sparse_element
{
size_type index; // probably uint32_t or uint16_t (templated)
value_type value; // probably double (templated)
};
#pragma pack()
我们在这里看到,如果没有每个稀疏元素,则需要 16 个字节,而不是 12 个甚至 10 个字节。这会影响非常大的矩阵的内存。#pragma pack
稀疏矩阵和稀疏向量的最佳方法是什么?假设对于稀疏向量:
- 一个数组 like with
sparse_element
std::vector<sparse_element>
#pragma pack()
- 它占用内存,只是用于数据的内容。没有填充字节。
- (我听说)在某些架构上,对内存的未对齐访问成本太高。
- 一个分配的内存区域,里面有 2 个阵列,一个用于,一个用于,例如 和。根本没有结构。它被分解。
index
value
std::span<index_type>
std::span<value_type>
sparse_element
- 它占用内存,只是用于数据的内容。没有填充字节。
- 没有对内存的未对齐访问。
- 更复杂的实现。
这个问题会影响每个具有大量元素的结构数组。
我赞成第二种方法。
答: 暂无答案
评论
best