假設變數 data 為無號整數,需向上取整到 8 的倍數:
aligned = ((data + 7) >> 3) << 3;
等價於:(data + 7) & ~7 或 (data + 7) & -8。
// n 為冪次,如 3 表示 8,4 表示 16
aligned = (data + (1 << n) - 1) & ~((1 << n) - 1);
或使用位移:
aligned = ((data + (1 << n) - 1) >> n) << n;
data + (2ⁿ - 1):確保若 data 不在邊界上,進位到下一個邊界。& ~(2ⁿ - 1):清除低 n 位,得到 2ⁿ 的倍數。n 位捨去低位,左移 n 位補零,效果相同。malloc、posix_memalign 參數)。#include <memory>
void* ptr = std::aligned_alloc(alignment, size); // alignment 必須為 2 的冪次
// 或
std::align(alignment, size, ptr, space);