【发布时间】:2015-06-08 13:32:14
【问题描述】:
当使用 calloc 时,指向新分配内存的指针至少与一定数量的最低有效位对齐,这意味着最低有效位(作为标记指针)可用于无锁算法,实际上通常是在这些算法的情况下使用。我在 linux ubuntu 服务器(x86_64 GNU/Linux,3.10.23-xxxx-std-ipv6-64-vps)上测试内存管理功能,从我的实验看来,4 个最低有效位设置为 0。从我读到的内容指出,指针对齐的形成方式是使表示为 uintptr 的指针除以 4(对齐到 2 个最低有效位)
从 POSIX (linux) 中的内存管理系统获得的新分配的内存指针中最低有效位的最小数量是多少,在初始内存分配过程中始终设置为 0?
在 linux 系统上可以用作标记指针的最低有效位的最大数量是多少(例如无锁算法)?
如何强制编译器对齐新分配的指针以执行最低有效位的数量?
指针的对齐方式是否会影响系统的整体性能,以及如何影响?
【问题讨论】:
-
没有设置为 0 的最低有效位的“最小”或“最大”数。内存对齐高度依赖于平台。您所知道的是,系统通常具有一种限制内存对齐的类型,并且
malloc()和其他内存分配函数总是返回一个针对最严格的类型进行适当对齐的指针(因此可以与任何类型一起使用) -
为什么你认为内存对齐和无锁算法之间存在关系?
-
我想你可能想阅读man7.org/linux/man-pages/man3/posix_memalign.3.html。通常内存对齐基于 sizeof(double)。如果您调用手册页中的函数,则可以更改。
-
@Robert Jacobs 内存对齐和无锁算法之间的关系是当一个人能够使用标记指针时。