std::align是一個(gè)普通的自由函數(shù)。這不是一個(gè)編譯器提示,沒有魔法。它確實(shí)會(huì)影響代碼生成,就像任何其他函數(shù)可能會(huì)影響代碼生成一樣,也就是說,它可能會(huì)被內(nèi)聯(lián)、重新排序等,但不會(huì)以任何特定的方式。 關(guān)于函數(shù)的作用和使用時(shí)間(cppreference): 給定指向大小為space的緩沖區(qū)的指針ptr,返回按指定的對(duì)齊方式對(duì)齊的指針(大小為字節(jié)數(shù)),并按用于對(duì)齊的字節(jié)數(shù)減少space參數(shù)。返回第一個(gè)對(duì)齊的地址。 因此,它是一個(gè)運(yùn)行時(shí)構(gòu)造,它執(zhí)行一些指針?biāo)惴▉矸祷乜捎糜谒鑼?duì)齊的地址。假設(shè)您想將std::int64_t存儲(chǔ)在某個(gè)內(nèi)存地址,但您不知道它是否已經(jīng)正確對(duì)齊(因?yàn)樗挥诜峙溆衧td::malloc的某個(gè)緩沖區(qū)的中間),那么std::align就是您的朋友。 以下是libstdcxx實(shí)現(xiàn): inline void*align(size_t __align, size_t __size, void*& __ptr, size_t& __space) noexcept{ if (__space < __size) return nullptr; const auto __intptr = reinterpret_cast<uintptr_t>(__ptr); const auto __aligned = (__intptr - 1u + __alig