gpt4 book ai didi

c - dlmalloc 中的内存对齐掩码

转载 作者:太空宇宙 更新时间:2023-11-04 03:24:19 27 4
gpt4 key购买 nike

我正在阅读 Doug Lea 的内存分配器 here .我找到了以下宏来计算要添加到地址以使其对齐的偏移量。

/* The bit mask value corresponding to MALLOC_ALIGNMENT */
#define CHUNK_ALIGN_MASK (MALLOC_ALIGNMENT - SIZE_T_ONE)

/* True if address a has acceptable alignment */
#define is_aligned(A) (((size_t)((A)) & (CHUNK_ALIGN_MASK)) == 0)

/* the number of bytes to offset an address to align it */
#define align_offset(A)\
((((size_t)(A) & CHUNK_ALIGN_MASK) == 0)? 0 :\
((MALLOC_ALIGNMENT - ((size_t)(A) & CHUNK_ALIGN_MASK)) & CHUNK_ALIGN_MASK))

我的问题是关于最后一个 & CHUNK_ALIGN_MASK。为什么要这样做?

MALLOC_ALIGNMENT - ((size_t)(A) & CHUNK_ALIGN_MASK) 完成时,您已经知道地址与对齐边界的距离。为什么要再次对掩码执行 AND

最佳答案

不需要。看起来像 belt and suspenders代码。

以下只能取[0...CHUNK_ALIGN_MASK]的值。 & CHUNK_ALIGN_MASK 不影响结果。

((((size_t)(A) & CHUNK_ALIGN_MASK) == 0)? 0 :\
((MALLOC_ALIGNMENT - ((size_t)(A) & CHUNK_ALIGN_MASK)) ...))

最好只对 A 进行 1 次评估。在这种情况下,需要第二个 & CHUNK_ALIGN_MASK 来处理对齐的情况:

#define align_offset(A) \
((MALLOC_ALIGNMENT - ((size_t)(A) & CHUNK_ALIGN_MASK)) & CHUNK_ALIGN_MASK)

关于c - dlmalloc 中的内存对齐掩码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42473033/

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