我刚刚完成了一项测试,作为求职面试的一部分,一个问题让我感到难过 - 甚至使用谷歌作为参考.我想看看stackoverflow工作人员可以用它做什么:
"memset_16aligned"函数需要传递给它的16byte对齐指针,否则它将崩溃.
a)如何分配1024字节的内存,并将其与16字节边界对齐?
b)执行memset_16aligned后释放内存.
{
void *mem;
void *ptr;
// answer a) here
memset_16aligned(ptr, 0, 1024);
// answer b) here
}
Run Code Online (Sandbox Code Playgroud) 如何将指针对齐到16字节边界?
我找到了这段代码,不确定它是否正确
char* p= malloc(1024);
if ((((unsigned long) p) % 16) != 0)
{
unsigned char *chpoint = (unsigned char *)p;
chpoint += 16 - (((unsigned long) p) % 16);
p = (char *)chpoint;
}
Run Code Online (Sandbox Code Playgroud)
这会有用吗?
谢谢
给定一个unsigned char *x,我需要将*x指向下的地址舍入到16的倍数.如下0x7fff5fbff7fc到0x7fff5fbff7f0.我试图改变它:
x >> 4;
x << 4;
Run Code Online (Sandbox Code Playgroud)
也试过了
x >>= 4;
x <<= 4;
Run Code Online (Sandbox Code Playgroud)
但考虑到它不是整数,它不允许我这样做.有什么建议?
来自网络的数据包在末尾添加了填充字节以进行对齐。我想跳过这些字节,但数据包大小可变但已知。给定一个 number n,如何将其四舍五入到下一个 4 字节对齐?