Mas*_*der 1 c virtual-address-space address-space
我的问题是关于处理地址空间的。
我有两个十六进制的地址空间:0x7fffff09和0x7fffff08。
我怎么知道它们是否可以被8或8字节对齐整除?就像检查在C或C ++代码中的样子一样。我知道您通常将mod用作常规数字,如果没有余数,那么就知道它是可整除的。
编辑:地址空间可以是__8,__ 16,__ 32(8位,16位,32位)
8字节对齐取决于体系结构。
8字节可除只是一个模运算。将指针复制到足够大的int并执行%8。
#include <stdint.h>
void *addr = ....
uintptr_t i = (uintptr_t)addr;
i = i % 8
Run Code Online (Sandbox Code Playgroud)
您当然可以将其放在一个函数中:
int isEightByteDivisible(const void *addr) {
return ((uintptr_t)addr % 8) == 0
}
Run Code Online (Sandbox Code Playgroud)
另请参阅确定C / C ++结构相对于其成员的对齐方式,以解决对齐问题。
| 归档时间: |
|
| 查看次数: |
1167 次 |
| 最近记录: |