★ //memblock->data 的有效数据从index索引开始,长度为length
struct pa_memchunk {
struct pa_memblock *memblock;
size_t index, length;
};
★ //base 是每次取出的大小
//buffer和buffer_fill是不够base长度的部分,放入到buffer
struct pa_mcalign {
size_t base;
struct pa_memchunk chunk;
uint8_t *buffer;
size_t buffer_fill;
};
■ void pa_memchunk_make_writable(struct pa_memchunk *c)
将pa_memchunk中的index和length设置为0,将pa_memchunk中的memblock的data进行移动。
c->memblock->ref为1时,不能进行数据移动。
■ struct pa_mcalign *pa_mcalign_new(size_t base)
初始化pa_mcalign
■ void pa_mcalign_free(struct pa_mcalign *m)
释放pa_mcalign
pa_mcalign,buffer和chunk
■ void pa_mcalign_push(struct pa_mcalign *m, const struct pa_memchunk *c)
将c放入到pa_mcalign中的chunk
■ int pa_mcalign_pop(struct pa_mcalign *m, struct pa_memchunk *c)
将整数base的数据进行返回
将不足base的数据,保存到pa_mcalign中的buffer,下次进行pop,从pa_mcalign->chunk->memblock->data前部数据将buffer补足到base长度。