- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我担心对齐和 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/
我担心对齐和 Interlocked 操作。再次。这些函数的文档指出我们要更新的变量应该在 32 位边界上对齐,我们可以通过 _aligned_malloc 实现这一点。很好。 所以我有这个小测试程序
在将对象添加到 vector 之前,我试图确保对象对齐数据结构。响应warning C4316: 'Basic' : object allocated on the heap may not be a
我想知道如何将此 C 代码转换为 C++ 以实现内存对齐。 float *pResult = (float*) _aligned_malloc(length * sizeof(float), 16);
获取对齐的内存块有几个选项,但它们非常相似,问题主要归结为您的目标语言标准和平台。 C11 void * aligned_alloc (size_t alignment, size_t size) P
我是一名优秀的程序员,十分优秀!