memchunk.c

★ //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长度。



原文地址:https://www.cnblogs.com/renhl/p/13020773.html