在C++中强制实施内存对齐
Enforce Memory alignment in C++
我想设计一个API,它在内部使用EIGEN。
基于 http://eigen.tuxfamily.org/dox/TopicPassingByValue.html,如果类将特征对象作为成员,则不能按值传递。
有没有直接的方法告诉编译器(例如 g++(我的对象不能通过值传递?
您可以简单地使复制构造函数不可用。您可以通过使用 Boost 并从 boost::noncopyable
继承来实现此目的,或者通过将复制构造函数设为私有:
struct Foo
{
private:
Foo(Foo const &) { }
};
或者在新C++中显式删除它:
struct Foo
{
Foo(Foo const &) = delete;
Foo(Foo &&) = delete;
};
您可能还应该通过对赋值运算符执行相同的操作来使您的类不可分配(boost::noncopyable
会为您处理这个问题(。
若要防止复制C++对象,请声明复制构造函数和赋值运算符,但将这些函数设为私有。(由于它们不被任何东西调用,因此您不必费心实现它们。
您引用的文档看起来是假的。这个Eigen::Vector2d
对象如何能够在原始对象中实现其正确的对齐方式,为什么复制对象没有相同的对齐方式?
没有给出有意义的非凡信息。
只需将复制构造函数/复制运算符设为私有即可。
相关文章:
- 如何理解将半精度指针转换为无符号长指针和相关的内存对齐
- 64位机器上的C++内存对齐
- 不正确的 Vulkan 统一缓冲区内存对齐
- Vulkan 内存对齐要求
- 投射空指针以检查内存对齐情况
- C++中的内存对齐语法
- 继承中的内存对齐规则
- 不了解C 内存对齐
- C++将结构强制转换为 std::矢量<char>内存对齐
- 如何分配内存对齐C++对象数组?
- 是否可以让 std::vector<char> 使用选定的内存对齐方式分配内存
- 有关内存对齐的其他问题
- 是否可以强制对C中的指针参数进行内存对齐
- C++类内存对齐
- 像“float[10][10]”初始化的数组是否已经针对 SIMD/SSE 进行了内存对齐
- 内存对齐 - Sparc(Sun) cc 编译器、Intel(Linux) g++ 编译器、Intel(Windows)
- 内存对齐优化不仅性能,而且内存大小
- Valarray 是否有连续的内存对齐
- 内存对齐与页面对齐
- 在C++中强制实施内存对齐