|
Blender V4.3
|
Efficient memory allocation for many small chunks. More...
#include <stdlib.h>#include <string.h>#include "MEM_guardedalloc.h"#include "BLI_asan.h"#include "BLI_memarena.h"#include "BLI_utildefines.h"#include "BLI_strict_flags.h"Go to the source code of this file.
Classes | |
| struct | MemBuf |
| struct | MemArena |
Macros | |
| #define | VALGRIND_CREATE_MEMPOOL(pool, rzB, is_zeroed) UNUSED_VARS(pool, rzB, is_zeroed) |
| #define | VALGRIND_DESTROY_MEMPOOL(pool) UNUSED_VARS(pool) |
| #define | VALGRIND_MEMPOOL_ALLOC(pool, addr, size) UNUSED_VARS(pool, addr, size) |
| #define | VALGRIND_MOVE_MEMPOOL(pool_a, pool_b) UNUSED_VARS(pool_a, pool_b) |
| #define | PADUP(num, amt) (((num) + ((amt)-1)) & ~((amt)-1)) |
Functions | |
| static void | memarena_buf_free_all (struct MemBuf *mb) |
| MemArena * | BLI_memarena_new (const size_t bufsize, const char *name) |
| void | BLI_memarena_use_calloc (MemArena *ma) |
| void | BLI_memarena_use_malloc (MemArena *ma) |
| void | BLI_memarena_use_align (MemArena *ma, const size_t align) |
| void | BLI_memarena_free (MemArena *ma) |
| static void | memarena_curbuf_align (MemArena *ma) |
| void * | BLI_memarena_alloc (MemArena *ma, size_t size) |
| void * | BLI_memarena_calloc (MemArena *ma, size_t size) |
| void | BLI_memarena_merge (MemArena *ma_dst, MemArena *ma_src) |
| void | BLI_memarena_clear (MemArena *ma) |
Efficient memory allocation for many small chunks.
Memory arena's are commonly used when the program needs to quickly allocate lots of little bits of data, which are all freed at the same moment.
Definition in file BLI_memarena.c.
| #define PADUP | ( | num, | |
| amt ) (((num) + ((amt)-1)) & ~((amt)-1)) |
Pad num up by amt (must be power of two).
Definition at line 106 of file BLI_memarena.c.
Referenced by BLI_memarena_alloc(), and memarena_curbuf_align().
| #define VALGRIND_CREATE_MEMPOOL | ( | pool, | |
| rzB, | |||
| is_zeroed ) UNUSED_VARS(pool, rzB, is_zeroed) |
Definition at line 29 of file BLI_memarena.c.
Referenced by BLI_memarena_clear(), BLI_memarena_merge(), BLI_memarena_new(), BLI_mempool_clear_ex(), and BLI_mempool_create().
| #define VALGRIND_DESTROY_MEMPOOL | ( | pool | ) | UNUSED_VARS(pool) |
Definition at line 30 of file BLI_memarena.c.
Referenced by BLI_memarena_clear(), BLI_memarena_free(), BLI_mempool_clear_ex(), and BLI_mempool_destroy().
| #define VALGRIND_MEMPOOL_ALLOC | ( | pool, | |
| addr, | |||
| size ) UNUSED_VARS(pool, addr, size) |
Definition at line 31 of file BLI_memarena.c.
Referenced by BLI_memarena_alloc(), BLI_mempool_alloc(), and BLI_mempool_free().
| #define VALGRIND_MOVE_MEMPOOL | ( | pool_a, | |
| pool_b ) UNUSED_VARS(pool_a, pool_b) |
Definition at line 32 of file BLI_memarena.c.
Referenced by BLI_memarena_merge().
| void * BLI_memarena_alloc | ( | MemArena * | ma, |
| size_t | size ) |
Definition at line 118 of file BLI_memarena.c.
References MemArena::align, BLI_asan_poison, BLI_asan_unpoison, MemArena::bufs, MemArena::bufsize, MemArena::curbuf, MemArena::cursize, MemBuf::data, MEM_callocN, MEM_mallocN, memarena_curbuf_align(), MemArena::name, MemBuf::next, PADUP, ptr, size(), UNLIKELY, MemArena::use_calloc, and VALGRIND_MEMPOOL_ALLOC.
Referenced by _bmo_slot_buffer_append(), _bmo_slot_copy(), add_cube(), add_member(), add_new_bound_vert(), blender::geometry::PackIsland::add_polygon(), add_type(), addfillface(), arena_alloc(), arena_realloc(), bevel_build_cutoff(), bevel_vert_construct(), BKE_lnor_spacearr_init(), BKE_mesh_loop_islands_add(), BKE_mesh_loop_islands_init(), BKE_mesh_remap_init(), BLI_astar_node_link_add(), BLI_astar_solution_init(), BLI_linklist_append_arena(), BLI_linklist_prepend_arena(), BLI_memarena_calloc(), BLI_polyfill_beautify(), BLI_polyfill_calc_arena(), BLI_scanfill_edge_add(), BLI_scanfill_vert_add(), blo_cache_storage_entry_register(), bm_face_split_by_edges_island_connect(), BM_face_split_edgenet_connect_islands(), bm_interp_face_store(), bm_isect_edge_tri(), BM_vert_loop_groups_data_layer_create(), bmesh_calc_tessellation_for_face_beauty(), bmesh_calc_tessellation_for_face_impl(), bmo_face_inset_individual(), bmo_inset_region_exec(), BMO_slot_buffer_alloc(), BMO_slot_buffer_from_array(), BMO_slot_buffer_from_single(), BMO_slot_mat_set(), build_bvh_spatial(), build_vmesh(), C_BVHTree_FromPolygons(), calculate_profile(), DNA_member_id_rename(), dynstr_alloc(), blender::geometry::PackIsland::finalize_geometry_(), ghash_insert_face_edge_link(), ghash_insert_link(), init_meta(), insert_seam_vert_array(), knife_empty_list(), math_layer_info_init(), blender::bke::mesh::mesh_calc_tessellation_for_face_impl(), mesh_customdatacorrect_init_container_merge_group(), mesh_customdatacorrect_init_vert(), mesh_remap_item_define(), mesh_tessface_calc(), meshdeform_matrix_solve(), meshdeform_ray_tree_intersect(), new_adj_vmesh(), blender::geometry::new_geo_uv_pinindex(), blender::geometry::p_add_ngon(), blender::geometry::p_face_add(), blender::geometry::p_vert_add(), blender::geometry::p_vert_copy(), blender::bke::pbvh::pbvh_bmesh_node_limit_ensure_fast(), project_paint_build_proj_ima(), project_paint_op(), project_paint_uvpixel_init(), sdna_expand_names(), set_profile_spacing(), setcenter(), setcorner(), setedge(), strdup_memarena(), strdup_memarena_from_dynstr(), UI_view2d_text_cache_add(), UI_view2d_text_cache_add_rectf(), and blender::bke::greasepencil::update_triangle_cache().
| void * BLI_memarena_calloc | ( | MemArena * | ma, |
| size_t | size ) |
Definition at line 155 of file BLI_memarena.c.
References BLI_assert, BLI_memarena_alloc(), NULL, ptr, and MemArena::use_calloc.
Referenced by BKE_lnor_space_create(), BKE_lnor_spacearr_init(), BLI_astar_graph_init(), lib_override_group_tag_data_object_to_collection_init_collection_process(), menu_items_from_all_operators(), menu_items_from_ui_create(), menu_items_from_ui_create_item_from_button(), mesh_island_to_astar_graph(), and blender::geometry::p_face_add().
| void BLI_memarena_clear | ( | MemArena * | ma | ) |
Clear for reuse, avoids re-allocation when an arena may otherwise be freed and recreated.
Definition at line 210 of file BLI_memarena.c.
References BLI_asan_poison, MemArena::bufs, MemArena::curbuf, MemArena::cursize, MemBuf::data, memarena_buf_free_all(), memarena_curbuf_align(), MemBuf::next, NULL, MemArena::use_calloc, VALGRIND_CREATE_MEMPOOL, and VALGRIND_DESTROY_MEMPOOL.
Referenced by BKE_lnor_spacearr_clear(), BKE_mesh_loop_islands_clear(), BLI_astar_solution_clear(), BLI_dynstr_clear(), BLI_scanfill_end_arena(), BM_face_triangulate(), BM_mesh_intersect(), bmesh_calc_tessellation_for_face_beauty(), bmesh_calc_tessellation_for_face_impl(), bmo_inset_individual_exec(), C_BVHTree_FromPolygons(), edbm_face_split_by_edges_exec(), blender::geometry::finalize_geometry(), knife_make_face_cuts(), blender::bke::mesh::mesh_calc_tessellation_for_face_impl(), mesh_tessface_calc(), blender::geometry::p_add_ngon(), smart_project_exec(), blender::bke::greasepencil::update_triangle_cache(), uv_select_overlap(), and uvedit_pack_islands_multi().
| void BLI_memarena_free | ( | MemArena * | ma | ) |
Definition at line 96 of file BLI_memarena.c.
References MemArena::bufs, MEM_freeN(), memarena_buf_free_all(), and VALGRIND_DESTROY_MEMPOOL.
Referenced by arena_release(), BKE_displist_fill(), BKE_library_make_local(), BKE_lnor_spacearr_free(), BKE_lnor_spacearr_tls_join(), BKE_maskrasterize_handle_init(), BKE_mesh_loop_islands_free(), BKE_mesh_remap_free(), BLI_astar_graph_free(), BLI_astar_solution_free(), BLI_dynstr_free(), BLI_polyfill_calc(), BLI_scanfill_end(), blo_cache_storage_end(), bm_decim_triangulate_begin(), BM_mesh_bevel(), bm_mesh_calc_tessellation__single_threaded(), BM_mesh_calc_tessellation_beauty(), bm_mesh_calc_tessellation_with_partial__single_threaded(), BM_mesh_intersect(), BM_mesh_triangulate(), bmesh_calc_tessellation_for_face_free_fn(), bmesh_calc_tessellation_for_face_partial_free_fn(), bmo_connect_verts_concave_exec(), bmo_inset_individual_exec(), bmo_inset_region_exec(), BMO_op_finish(), C_BVHTree_FromPolygons(), LibOverrideGroupTagData::clear(), DNA_sdna_free(), do_projectpaint_thread(), edbm_face_split_by_edges_exec(), blender::geometry::finalize_geometry(), freepolygonize(), harmonic_coordinates_bind(), knifetool_exit_ex(), layer_bucket_init(), make_structDNA(), menu_search_arg_free_fn(), mesh_customdatacorrect_free(), mesh_tessface_calc(), project_paint_end(), smart_project_exec(), test_polyfill_template(), UI_view2d_text_cache_draw(), blender::bke::greasepencil::update_triangle_cache(), uv_select_overlap(), uvedit_pack_islands_multi(), blender::bke::mesh::LocalData::~LocalData(), and blender::geometry::ParamHandle::~ParamHandle().
Definition at line 169 of file BLI_memarena.c.
References MemArena::align, BLI_assert, MemArena::bufs, MemArena::bufsize, MemArena::curbuf, MemArena::cursize, MemBuf::next, NULL, UNLIKELY, MemArena::use_calloc, VALGRIND_CREATE_MEMPOOL, and VALGRIND_MOVE_MEMPOOL.
| MemArena * BLI_memarena_new | ( | const size_t | bufsize, |
| const char * | name ) |
Definition at line 66 of file BLI_memarena.c.
References MemArena::align, MemArena::bufsize, MEM_callocN, MemArena::name, and VALGRIND_CREATE_MEMPOOL.
Referenced by _getSubSurf(), BKE_displist_fill(), BKE_library_make_local(), BKE_lnor_spacearr_init(), BKE_lnor_spacearr_tls_init(), BKE_maskrasterize_handle_init(), BKE_mball_polygonize(), BKE_mesh_loop_islands_init(), BKE_mesh_remap_init(), BLI_astar_graph_init(), BLI_astar_solution_init(), BLI_dynstr_new_memarena(), BLI_polyfill_calc(), BLI_scanfill_begin(), blo_cache_storage_init(), bm_decim_triangulate_begin(), BM_mesh_bevel(), BM_mesh_intersect(), BM_mesh_triangulate(), bmesh_calc_tessellation_for_face_beauty(), bmesh_calc_tessellation_for_face_impl(), bmo_connect_verts_concave_exec(), bmo_inset_individual_exec(), bmo_inset_region_exec(), BMO_op_init(), C_BVHTree_FromPolygons(), DNA_sdna_alias_data_ensure(), DNA_sdna_patch_struct_member(), do_projectpaint_thread(), edbm_face_split_by_edges_exec(), blender::geometry::finalize_geometry(), blender::bke::pbvh::Tree::from_bmesh(), harmonic_coordinates_bind(), knifetool_init(), layer_bucket_init(), lib_override_group_tag_data_object_to_collection_init(), make_structDNA(), menu_items_from_ui_create(), blender::bke::mesh::mesh_calc_tessellation_for_face_impl(), mesh_customdatacorrect_create_impl(), mesh_tessface_calc(), blender::geometry::ParamHandle::ParamHandle(), proj_paint_state_thread_init(), smart_project_exec(), test_polyfill_template(), UI_view2d_text_cache_add(), UI_view2d_text_cache_add_rectf(), blender::bke::greasepencil::update_triangle_cache(), uv_select_overlap(), and uvedit_pack_islands_multi().
| void BLI_memarena_use_align | ( | MemArena * | ma, |
| const size_t | align ) |
Definition at line 88 of file BLI_memarena.c.
References MemArena::align, and BLI_assert.
| void BLI_memarena_use_calloc | ( | MemArena * | ma | ) |
Definition at line 78 of file BLI_memarena.c.
References MemArena::use_calloc.
Referenced by BM_mesh_bevel(), BMO_op_init(), and harmonic_coordinates_bind().
| void BLI_memarena_use_malloc | ( | MemArena * | ma | ) |
Definition at line 83 of file BLI_memarena.c.
References MemArena::use_calloc.
|
static |
Definition at line 53 of file BLI_memarena.c.
References BLI_asan_unpoison, MEM_allocN_len, MEM_freeN(), MemBuf::next, and NULL.
Referenced by BLI_memarena_clear(), and BLI_memarena_free().
|
static |
Align alloc'ed memory (needed if align > 8).
Definition at line 109 of file BLI_memarena.c.
References MemArena::align, MemArena::curbuf, MemArena::cursize, int, and PADUP.
Referenced by BLI_memarena_alloc(), and BLI_memarena_clear().