KnowledgeHub
Questions
Tags
Users
Search
Alex Rivera
|
Logout
Edit Question
Title
Body
Can the alignment of a structure type be found if the alignments of the structure members are known? Eg. for: struct S { a_t a; b_t b; c_t c[]; }; is the alignment of S = max(alignment_of(a), alignment_of(b), alignment_of(c))? Searching the internet I found that "for structured types the largest alignment requirement of any of its elements determines the alignment of the structure" (in What Every Programmer Should Know About Memory ) but I couldn't find anything remotely similar in the standard (latest draft more exactly). Edited: Many thanks for all the answers, especially to Robert Gamble who provided a really good answer to the original question and the others who contributed. In short: To ensure alignment requirements for structure members, the alignment of a structure must be at least as strict as the alignment of its strictest member. As for determining the alignment of structure a few options were presented and with a bit of research this is what I found: c++ std::tr1::alignment_of not standard yet, but close (technical report 1), should be in the C++0x the following restrictions are present in the latest draft: Precondition:T shall be a complete type, a reference type, or an array of unknown bound, but shall not be a function type or (possibly cv-qualified) void. this means that my presented use case with the C99 flexible array won't work (this is not that surprising since flexible arrays are not standard c++) in the latest c++ draft it is defined in the terms of a new keyword - alignas (this has the same complete type requirement) in my opinion, should c++ standard ever support C99 flexible arrays, the requirement could be relaxed (the alignment of the structure with the fl
Tags (comma-separated)
Save Edits
Cancel