调用流程 nosva: flat init/init2 -> setup.block_size = DEFAULT_BLOCK_SIZE; setup.block_num = DEFAULT_BLOCK_NM; setup.align_size = DEFAULT_ALIGN_SIZE; g_blkpool = wd_comp_setup_blkpool(&setup) ->alloc_sess -> if (g_blkpool) { void *src = wd_blkpool_alloc(g_blkpool, size) void *dst = wd_blkpool_alloc(g_blkpool, size) } else { void *src = malloc(size); void *dst = malloc(size); } -> do_sync /aysnc -> if (g_blkpool) { wd_blkpool_free(g_blkpool, src) wd_blkpool_free(g_blkpool, dst) } else { free(src); free(dst); } -> free_sess -> uninit/uninit2
调用流程 nosva sgl init/init2 -> setup.block_size = DEFAULT_BLOCK_SIZE; setup.block_num = DEFAULT_BLOCK_NM; setup.align_size = DEFAULT_ALIGN_SIZE; g_blkpool = wd_comp_setup_blkpool(&setup) ->alloc_sess -> struct wd_datalist src_list = calloc(n, sizeof(struct wd_datalist)); for (int i = 0; i < n; i++) { if (g_blkpool) src_list[i].data = wd_blkpool_alloc(g_blkpool, size); else src_list[i].data = malloc(size); if (i < n-1) src_list[i].next = src_list[i+1]; } -> do_sync /aysnc -> for (int i = 0; i < n; i++) { if (g_blkpool) wd_blkpool_free(g_blkpool, src_list[i].data); else free(src_list[i].data); } free(src_list); -> free_sess -> uninit/uninit2