gpt4 book ai didi

c - 联锁操作和与 _aligned_malloc 对齐

转载 作者:太空宇宙 更新时间:2023-11-04 06:13:58 25 4
gpt4 key购买 nike

我担心对齐和 Interlocked 操作。再次。这些函数的文档指出我们要更新的变量应该在 32 位边界上对齐,我们可以通过 _aligned_malloc 实现这一点。很好。

所以我有这个小测试程序:

struct S
{
char c;
long l;
}an_S;

printf("%p, %p", (void*)(&(an_S.c)), (void*)(&(an_S.l)));

在 Release模式下,输出总是给我一个 long 的地址,它在 char 地址之后 4 个字节,因此它从 32 位边界开始。

1) 这纯粹是偶然的,还是我可以依靠它从而不需要 _aligned_malloc

2) 如果我必须使用 aligned_malloc,有人可以说明如何使用吗?我已阅读 https://msdn.microsoft.com/en-us/library/8z34s9c6.aspx 的文档但这似乎并没有说明如何为“分配”的内存分配一个值......

3) (假设我确实需要 aligned_malloc)如果我想要一个像上面那样具有 long 变量的结构数组,需要通过互锁操作对其进行操作,我是否需要添加某种构造函数来设置它,或者会有更简单的方法吗?

4) 我在谷歌上搜索了 _aligned_malloc+interlockedCompareExchange,它只 repo 了 70 个结果。这告诉我,使用 InterlockedCompareExchange(62,800 个结果)的大部分代码是错误的,或者 _aligned_malloc 不是必需的。有人可以澄清一下吗?

最佳答案

如果您的结构是对齐的,这是默认设置,那么每个成员都将对齐以适合成员类型。

malloc 而言,documentation对于 MSVC 解释说,在 32 位目标上,内存是 8 字节对齐的,在 64 位目标上,它是 16 字节对齐的。所以你可以使用 malloc

关于c - 联锁操作和与 _aligned_malloc 对齐,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50135073/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com