在编译时检查特征类型保存的数据在内存中是否连续
Check at compile time the data held by Eigen type is contiguous in memory
我正在编写一些通用代码,这些代码对于在内存中保存连续数据的人和那些不保存连续数据的人,可以以不同的方式处理特征表达式。
我知道在运行时,这可以通过检查expr.innerSize() == expr.outerStride() && expr.innerStride() == 1
来完成,但我想知道这是否可以在编译时完成?
== 编辑 ==此检查的目的是允许在表达式xpr
的泛型代码中执行以下操作:
// c++20
if (is_linear_accessible(xpr.data(), size)) {
auto buffer = std::span(xpr.data(), size);
// work with buffer safely
// ...
} else {
auto tmp = xpr.eval();
// work with tmp.data()
// ...
}
这样,我可以将数据传递给在原始缓冲区上工作的其他库。正如@JaMiT指出的那样,由于它涉及运行时信息,这只能在运行时完成,但我想尽可能多地利用编译时信息来"缩短"该过程。
您要查找的标志是 DenseBase<>::Flags
的LinearAccessBit
,正如@ggael指出的那样,请确保InnerStrideAtCompileTime
等于 1
。
相关文章:
- 在C++中打印指向不同基元数据类型的指针的内存地址
- 如何在 malloc 内存中初始化非 POD 数据
- 如何使用 MPI 的远程内存访问 (RMA) 功能并行化数据聚合?
- 为什么字符串的 move() 会改变内存中底层数据的位置?
- C++,您能否设计一种数据结构,将指针保存在连续内存中并且不会使它们失效?
- 存储在哪个内存段(代码/数据段)类(员工)中?
- 基于浅树的数据结构的内存分配器,用于频繁分配和解除分配
- 获取 R 数据帧的内存地址
- 将数据存储在内存中以供以后访问
- 整数数据如何以位为单位存储在内存中?不是右对齐吗?
- 数据在内存 c++ 中丢失
- 我可以使用哪种数据结构来释放连续内存中的内存?
- 使用 delete [] 运算符取消分配类中数据成员的内存
- 为什么 std::set 容器使用的内存比其数据大小多得多?
- 如果一个变量在它之前释放了另一个(相同的数据类型)变量,如何将其分配给内存?
- 内存映射C++中的流数据
- 如何返回定义良好的内存部分?例如来自图像数据的像素的颜色值
- C++应用程序中的静态数据内存限制
- 基于两个程序之间的事件触发器访问数据(内存)
- C++并集表示数据内存与C标量变量类型