Does new char actually guarantee aligned memory for a class type?

后端 未结 2 1000
伪装坚强ぢ
伪装坚强ぢ 2020-12-15 15:15

Is allocating a buffer via new char[sizeof(T)] guaranteed to allocate memory which is properly aligned for the type T, where all members of T

2条回答
  •  慢半拍i
    慢半拍i (楼主)
    2020-12-15 15:25

    What I'm missing is the bit which says alignof(T) will always be a valid alignment with a maximum value of max_align_t. I mean, it seems obvious, but must the resulting alignment of a structure be at most max_align_t ? Even point 3.11-3 says extended alignments may be supported, so may the compiler decide on its own a class is an over-aligned type ?

    As noted by Mankarse, the best quote I could get is from [basic.align]/3:

    A type having an extended alignment requirement is an over-aligned type. [ Note: every over-aligned type is or contains a class type to which extended alignment applies (possibly through a non-static data member). —end note ]

    which seems to imply that extended alignment must be explicitly required (and then propagates) but cannot

    I would have prefer a clearer mention; the intent is obvious for a compiler-writer, and any other behavior would be insane, still...

提交回复
热议问题