[osg-users] How to byte-align Vec4Array
david.spilling at gmail.com
Tue Jul 8 06:13:28 PDT 2008
Hi Gordon, Thibault,
Thanks for the replies regarding the contiguity of the memory in a
std::vector. That at least solves half of the problem.
> Use &yourvector to get a float* pointer to the beginning of the
How do I define the vec4array so that &yourvector is absolutely aligned,
i.e. a multiple of (in my case) 16?
With a float array, on MS compilers, I would do __declspec(align(16)) float*
myarray = new float[4 * MY_ARRAY_SIZE]. From what I understand, and from the
MSDN documentation (http://msdn.microsoft.com/en-us/library/83ythb65.aspx)
this is the correct way to guarantee this. #pragma pack 16 doesn't always do
what you expect...
If I do __declspec(align(16)) Vec4Array* myarray = new Vec4Array, I'm
guaranteed that "myarray" is 16 byte aligned, but what about the contents of
the array? Especially if I do lots of ->push_back so that the std::vector
resizes and goes somewhere else. Even if I do __declspec(align(16))
Vec4Array* myarary = new Vec4Array(MY_ARRAY_SIZE) I don't think I'm
guaranteed 16 byte alignment of the first vector entry...
(I think the gcc equivalent to __declspec(align(X)) is __aligned__(X), by
-------------- next part --------------
An HTML attachment was scrubbed...
More information about the osg-users