What are the alignas and alignof keywords used for?
I'm having trouble understand what the purpose of the alignas
and alignof
keywords are, and I'm not quite sure I fully understand what alignment is.
As I understand it, a memory address is aligned to n bytes if it is divisible by n, that is, it can be got to by counting 'n' bytes at a time (from 0? or some default value?). Also, the alignas
keyword, when prefixing a variable declaration, specifies how the address at which the variable is stored is to be aligned, and the alignof
returns how a variable's address is aligned.
However, I am not confident that this is a correct understanding of alignment or the alignof
/alignas
keywords - please correct me on any of the points I got wr开发者_StackOverflow社区ong. I also don't see what use these keywords serve, so I would appreciate it if anyone could point out what their purpose is.
Some special types must be aligned at more bytes than usual- for example, matrices must be aligned at 16bytes on x86 for the most efficient copying to the GPU. SSE vector types can behave this way too. As such, if you want to make a container type, then you must know the alignment requirements of the type you're trying to contain or allocate.
精彩评论