如何对齐内存地址?

Zer*_*One 0 c embedded

谁能告诉我如何将 16 位内存地址与 C 语言中最近的 2kB 地址边界对齐?

Fra*_*e_C 5

如果您想自己完成,或者需要它进行动态分配/寻址,您可以使用以下简单计算:

Aligned2kBoundary = (Unaligned + 2047) & ~(2047);
Run Code Online (Sandbox Code Playgroud)

以更广义的形式, ifbound是你的边界值:

Aligned2kBoundary = (Unaligned + bound -1) & ~(bound-1);
Run Code Online (Sandbox Code Playgroud)

警告:仅适用于 2 的幂的边界!

PS,对于没有注意到的人,这个问题是针对嵌入式系统的,也许他想在运行时动态调整地址,而不是在编译时。