Что происходит
Когда я пытаюсь добавить Eigen::Vector3f
в std::vector
после урока на веб-сайте Eigen , например:
#include <Eigen/Core>
#include <Eigen/StdVector>
#include <iostream>
template <class EigenT>
using EigenStdVector = std::vector<EigenT, Eigen::aligned_allocator<EigenT>>;
int main() {
EigenStdVector<Eigen::Vector3f> vec;
vec.emplace_back(1.0f, 1.0f, 1.0f);
std::cerr << vec.back().transpose() << std::endl;
return 0;
}
Iполучите следующее предупреждение:
In file included from /usr/include/eigen3/Eigen/Core:349:0,
from /home/igor/Code/eigen_example/example.cpp:3:
In function ‘void* Eigen::internal::aligned_malloc(std::size_t)’,
inlined from ‘void std::vector<_Tp, _Alloc>::_M_realloc_insert(std::vector<_Tp, _Alloc>::iterator, _Args&& ...) [with _Args = {float, float, float}; _Tp = Eigen::Matrix<float, 3, 1>; _Alloc = Eigen::aligned_allocator<Eigen::Matrix<float, 3, 1> >]’ at /usr/include/eigen3/Eigen/src/Core/util/Memory.h:742:76:
/usr/include/eigen3/Eigen/src/Core/util/Memory.h:159:12: warning: argument 1 value ‘18446744073709551612’ exceeds maximum object size 9223372036854775807 [-Walloc-size-larger-than=]
result = std::malloc(size);
Как воспроизвести
Я на Ubuntu 18.04 и у меня установлено Eigen 3.3.4 .
Вы можете построить код в этом вопросе с помощью следующей команды, если Eigen установлен с помощью следующей команды:
g++ -I/usr/include/eigen3 -O3 example.cpp
Что вызывает предупреждение
- ПредупреждениеОтображается только при использовании
Vector2f
, Vector3f
и т. д. Оно не отображается для таких типов, как Matrix2f
, Matrix3f
и т. д. - Предупреждение отображается, когда у меня включен
-O[1-3]
и делаетне бывает с -O0
Дополнительная информация:
Этот вопрос , похоже, связан, но я не понимаю, как он мог бы мне помочь.
Я сделал небольшой пример для всех, кто хочет готовый пример.Вы можете найти его на моем GitHub .
У кого-нибудь есть идеи, что здесь может быть не так?