MengRao/fmtlog

Problem about align

LazyWolfLin opened this issue · 3 comments

我在阅读时看到这段注释,这里的意思是否是在处理对齐要求大于 16 的对象时,gcc 会嵌入对齐指令,所以尽量使用 memcpy 而非 new?

fmtlog/fmtlog.h

Lines 480 to 482 in d34990c

// If Arg has alignment >= 16, gcc could emit aligned move instructions(e.g. movdqa) for
// placement new even if the *out* is misaligned, which would cause segfault. So we use memcpy
// when possible

但是我在 gcc 9.2 上观察到传递给 new 非对齐的地址,new 返回的值并没有偏移到对齐的位置上。随后我查看 cppreference,发现 placement new 返回的是给定的指针。
所以,这里指的是什么情况,是否是我理解错了场景?

这里的placement new是为了调用复制构造函数,但不会分配内存,所以返回值是没有意义的。

这里的placement new是为了调用复制构造函数,但不会分配内存,所以返回值是没有意义的。

我知道这里是为了调用复制构造,我疑惑的是注释里提到的嵌入对齐指令这个情况。因为我没能复现这个场景。

可能出现,并不是绝对,和对象定义有关。