gpt4 book ai didi

c - 无锁算法的指针对齐

转载 作者:太空狗 更新时间:2023-10-29 11:27:11 27 4
gpt4 key购买 nike

当使用 calloc 时,指向新分配内存的指针至少与最低有效位的一定数量对齐,这意味着最低有效位(如标记指针)可用于无锁算法,实际上通常是在这些算法的情况下使用。我在 linux ubuntu 服务器(x86_64 GNU/Linux,3.10.23-xxxx-std-ipv6-64-vps)上测试内存管理功能,从我的实验来看,4 个最低有效位似乎设置为 0。来 self 读到的内容指出,指针对齐的形成方式是将表示为 uintptr 的指针除以 4(对齐到 2 个最低有效位)

从 POSIX (linux) 中的内存管理系统获得的新分配的内存指针中,在初始内存分配过程中始终设置为 0 的最低有效位的最小数量是多少?

在 linux 系统(例如无锁算法)上可以用作标记指针的最低有效位的最大数量是多少?

如何强制编译器将新分配的指针对齐到最低有效位的数量?

指针对齐是否影响系统整体性能,如何影响?

最佳答案

出于许多相关原因,对齐在优化中很重要:

  • 高效使用缓存行
  • 避免禁用预取逻辑
  • vector 寄存器/指令(SSE、AVX)的最佳使用。
  • 尤其是在涉及 I/O 时,内存页面对齐也很重要。

您可以在此处找到有关英特尔架构的非常好的引用资料: http://www.intel.com/content/www/us/en/architecture-and-technology/64-ia-32-architectures-optimization-manual.html

快速回答您的问题:

What is the minimum number of the least significant bits in newly allocated memory pointers, obtained from memory menagment system in POSIX (linux), that are always set to 0 during initial memory allocation process?

这实际上取决于您所说的 CPU/架构。

What is the maximum number of the least significant bits that can be used as tagged pointers on linux systems (eg. lock-free algorithms)?

与前者相同:如果 C++ 是一个选项,您应该使用 std::atomicboost::atomic 以获得某种可移植性。

在 Intel 架构上,内存加载和存储对于 32 位、x86_32 和 x86_64 上的 64 位是原子的,如果数据正确对齐

如果你真的很喜欢这种底层,别忘了看看内存语义,内存栅栏等等(上面手册中的“栅栏说明”)

关于c - 无锁算法的指针对齐,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30710514/

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