|Re: [eigen] STL Vectors and Alignment|
[ Thread Index | Date Index | More lists.tuxfamily.org/eigen Archives ]
These examples and answers should actually go into the Documentation, that would help a lot for inexperienced users :-) :-)
Thanks for the help!!
On 11/26/2014 09:40 PM, Christoph Hertzberg wrote:
On 26.11.2014 17:39, Gabriel wrote:
Thanks for the answer!
Sorry again for my unclear phrasing!
Just to be absolutely sure:
Lets say we have:
If we use A locally:
is a.t aligned on the Stack, (how does alignment work on the stack)
Yes, that is aligned on the stack. Also, if you wrote, e.g.
char dummy; // compiler will add filling bytes after this
a.t will be aligned on the stack.
The data member of Vector2d has a compiler attribute which tells it to always have it aligned.
If we use A on the heap:
A * a = new A;
then as "a" is not aligned , also a.t is not aligned
It is not guaranteed to be aligned. It is, however, aligned on most (all?) 64bit systems.
If we use EIGEN_MAKE_ALLOCATOR_NEW inside A , then "a" is aligned , and
BUT what happens in this example:
std::vector< C , Eigen::aligned_allocator<C> > vec(1);
Is vec.b.a.t now aligned in memory? which does *NOT*
result in a segfault if Eigen uses SIMD internally?
If we use locally lets say:
c.b.a.t do something with t
is c.b.a.t aligned on the Stack?
Or on the heap:
C * c = new C;
c might not be aligned => c.b might not be aligned => c.b.a => might
not bealigned => c.b.a.t might not be aligned => SEGFAULT for usage of
Correct. c is not guaranteed to be aligned (except on most 64 bit systems ....)
How do I need to correct the above example such that in the cases above,
vector A::t is always aligned to 16bytes?
To make the only not yet working case work, you need to add an
into struct C. It would not hurt to add it into A and B, as well.
|Mail converted by MHonArc 2.6.19+||http://listengine.tuxfamily.org/|