gcc - Is it guaranteed that Complex Float variables will be 8-byte aligned in memory? -
in c99 new complex types defined. trying understand whether compiler can take advantage of knowledge in optimizing memory accesses. these objects (a-f) of type complex float guaranteed 8-byte aligned in memory?
#include "complex.h" typedef complex float cfloat; cfloat a; cfloat b[10]; void func(cfloat c, cfloat *d) { cfloat e; cfloat f[10]; } note d, question relates object pointed d, not pointer storage itself. and, if assumed aligned, how can 1 sure address passed of actual complex , not cast (non 8-aligned) type?
update 1: answered myself in last comment regarding d pointer. b/c there no way know address assigned parameter of function call, there no way guarantee 8-aligned. solvable via __builtin_assumed_aligned() function.
the question still open other variables.
update 2: posted follow-up question here.
a float complex guaranteed have same memory layout , alignment array of 2 float (§6.2.5). alignment defined compiler or platform. can sure float complex at least aligned float.
if assumed aligned, how can 1 sure address passed of actual complex , not cast (non 8-aligned) type?
if caller passes insufficiently-aligned pointer, that's undefined behavior , bug in code (§6.3.2.3). don't need support (though may choose to).
Comments
Post a Comment