sbc_struct结构详解
*priv、*priv_alloc_base
priv指针与priv_alloc_base指针。
在初始化过程sbc_init(&sbc, 0L)
中,给两个指针分配空间:
/* sbc.c */
// sbc
SBC_EXPORT int sbc_init(sbc_t *sbc, unsigned long flags)
{
if (!sbc)
return -EIO;
memset(sbc, 0, sizeof(sbc_t));
// struct sbc_priv 见下方
sbc->priv_alloc_base = malloc(sizeof(struct sbc_priv) + SBC_ALIGN_MASK);
if (!sbc->priv_alloc_base)
return -ENOMEM;
// typedef unsigned long uintptr_t;
// m&~n 为m/n所剩余数据的起始位置
// SBC_ALIGN_MASK 为15
sbc->priv = (void *) (((uintptr_t) sbc->priv_alloc_base +
SBC_ALIGN_MASK) & ~((uintptr_t) SBC_ALIGN_MASK));
memset(sbc->priv, 0, sizeof(struct sbc_priv));
sbc_set_defaults(sbc, flags);
return 0;
}
SBC_ALIGN_MASK
:
/* sbc_tables.h */ /* * Enforce 16 byte alignment for the data, which is supposed to be used * with SIMD optimized code. */ #