PG 中的 MAXALIGN 和 内存对齐分配(MemoryAlign)
发布时间
阅读量:
阅读量
在PG源代码库中,该宏名称MAXALIGN返回比输入数值大的最近值,并被其最大可分配对齐大小MAXIMUM_ALIGNOF 整除的结果。具体来说,在64位操作系统上该值为8,在32位操作系统上则为4。仅仅如此,并主要应用于与内存相关联的计算操作,在其应用领域内具有广泛的使用情况。
为什么要采用MAXALIGN?基于 「CPU访问对齐的地址性能更高」 的认识,在PostgreSQL(PG)中,默认设置下各对象如tuple(元组)、page(页面)等不仅拥有固定的大小,并且起始地址均为8字节对齐,在实现这一目标的同时还会添加额外的数据填充项padding以满足相关需求。
在某些情况下,在内存地址对齐时要求其值超过MAXALIGN。这时,在这种情况下我们可以使用BUFFER_ALIGN功能块(BUFFERALIGN),它会返回一个最近似的输入数值(大于该数值),并且该数值能够被32整除。
在最新发布的PG 1.x版本中, MemoryContext支持能够返回指定的对齐地址的内存管理功能
void *MemoryContextAllocAligned(MemoryContext context, Size size, Size alignto, int flags)
其实其实现原理非常简单:预留一块略大于Size与AlignTo之和的内存空间。不管该函数
全部评论 (0)
还没有任何评论哟~
