【发布时间】:2021-10-24 03:26:53
【问题描述】:
我知道对齐指针意味着什么。我相信这里的“大小”是指指针指向的对象所占用的内存大小。但是你也得到了一个“对齐”变量。这个变量的含义是什么?在这种情况下,它只是您希望地址成为倍数的值吗?例如,4(我认为这是典型的)?
【问题讨论】:
-
这也可能有助于您的理解:stackoverflow.com/questions/58435348/…
我知道对齐指针意味着什么。我相信这里的“大小”是指指针指向的对象所占用的内存大小。但是你也得到了一个“对齐”变量。这个变量的含义是什么?在这种情况下,它只是您希望地址成为倍数的值吗?例如,4(我认为这是典型的)?
【问题讨论】:
在这种情况下,它只是您希望地址成为倍数的值吗?例如,4
是的。
为了对齐指针,将未对齐的地址四舍五入到最接近的倍数。 C++ 标准库中有一个用于此目的的标准函数:std::align。该函数还可用于测试指针是否对齐。
【讨论】:
ptr,看起来你只是做类似(ptr + alignment - 1) / alignment * alignment)的事情?
ptr 是int *,我似乎可以使用((intptr_t)ptr + alignment - 1) / alignment * alignment) 让它工作。如果不使用std::align,您将如何处理自定义数据类型?