Back to Mimalloc

mi

docs/mimalloc-doc_8h_source.html

3.5.0104.9 KB
Original Source

| | mi-malloc 3.4/2.4/1.9 | |

Loading...

Searching...

No Matches

mimalloc-doc.h

1/* ----------------------------------------------------------------------------

2Copyright (c) 2018-2026, Microsoft Research, Daan Leijen

3This is free software; you can redistribute it and/or modify it under the

4terms of the MIT license. A copy of the license can be found in the file

5"LICENSE" at the root of this distribution.

6-----------------------------------------------------------------------------*/

7

8#error "documentation file only!"

9

10

123

124

128voidmi_free(void* p);

129

134void* mi_malloc(size_t size);

135

140void* mi_zalloc(size_t size);

141

151void* mi_calloc(size_t count, size_t size);

152

166void* mi_realloc(void* p, size_t newsize);

167

181void* mi_expand(void* p, size_t newsize);

182

192void* mi_mallocn(size_t count, size_t size);

193

203void* mi_reallocn(void* p, size_t count, size_t size);

204

221void* mi_reallocf(void* p, size_t newsize);

222

223

232char* mi_strdup(const char* s);

233

243char* mi_strndup(const char* s, size_t n);

244

257char* mi_realpath(const char* fname, char* resolved_name);

258

272size_t mi_usable_size(void* p);

273

283size_t mi_good_size(size_t size);

284

286

287

288// ------------------------------------------------------

289// Aligned allocation

290// ------------------------------------------------------

291

299

317void* mi_malloc_aligned(size_t size, size_t alignment);

318void* mi_zalloc_aligned(size_t size, size_t alignment);

319void* mi_calloc_aligned(size_t count, size_t size, size_t alignment);

320void* mi_realloc_aligned(void* p, size_t newsize, size_t alignment);

321

333void* mi_malloc_aligned_at(size_t size, size_t alignment, size_t offset);

334void* mi_zalloc_aligned_at(size_t size, size_t alignment, size_t offset);

335void* mi_calloc_aligned_at(size_t count, size_t size, size_t alignment, size_t offset);

336void* mi_realloc_aligned_at(void* p, size_t newsize, size_t alignment, size_t offset);

337

339

340

350

364#define mi_malloc_tp(tp) ((tp*)mi_malloc_csize(sizeof(tp)))

365

372#define mi_free_tp(tp,p) (mi_free_csize(p,sizeof(tp)))

373

375#define mi_zalloc_tp(tp) ((tp*)mi_zalloc_csize(sizeof(tp)))

376

378#define mi_calloc_tp(tp,count) ((tp*)mi_calloc(count,sizeof(tp)))

379

381#define mi_mallocn_tp(tp,count) ((tp*)mi_mallocn(count,sizeof(tp)))

382

384#define mi_reallocn_tp(p,tp,count) ((tp*)mi_reallocn(p,count,sizeof(tp)))

385

387#define mi_heap_malloc_tp(tp,hp) ((tp*)mi_heap_malloc(hp,sizeof(tp)))

388

390#define mi_heap_zalloc_tp(tp,hp) ((tp*)mi_heap_zalloc(hp,sizeof(tp)))

391

393#define mi_heap_calloc_tp(tp,hp,count) ((tp*)mi_heap_calloc(hp,count,sizeof(tp)))

394

396#define mi_heap_mallocn_tp(tp,hp,count) ((tp*)mi_heap_mallocn(hp,count,sizeof(tp)))

397

399#define mi_heap_reallocn_tp(tp,hp,p,count) ((tp*)mi_heap_reallocn(p,count,sizeof(tp)))

400

402#define mi_heap_recalloc_tp(tp,hp,p,count) ((tp*)mi_heap_recalloc(p,count,sizeof(tp)))

403

405

418

424void* mi_malloc_csize(size_t size);

425

426void* mi_zalloc_csize(size_t size);

427

428void* mi_theap_malloc_csize(mi_theap_t* theap, size_t size);

429

430void* mi_theap_zalloc_csize(mi_theap_t* theap, size_t size);

431

437void mi_free_csize(void* p, size_t size);

438

440

450

461void* mi_recalloc(void* p, size_t count, size_t size);

462

463void* mi_rezalloc(void* p, size_t newsize);

464void* mi_recalloc(void* p, size_t newcount, size_t size) ;

465

466void* mi_rezalloc_aligned(void* p, size_t newsize, size_t alignment);

467void* mi_rezalloc_aligned_at(void* p, size_t newsize, size_t alignment, size_t offset);

468void* mi_recalloc_aligned(void* p, size_t newcount, size_t size, size_t alignment);

469void* mi_recalloc_aligned_at(void* p, size_t newcount, size_t size, size_t alignment, size_t offset);

470

471void* mi_heap_rezalloc(mi_heap_t* heap, void* p, size_t newsize);

472void* mi_heap_recalloc(mi_heap_t* heap, void* p, size_t newcount, size_t size);

473

474void* mi_heap_rezalloc_aligned(mi_heap_t* heap, void* p, size_t newsize, size_t alignment);

475void* mi_heap_rezalloc_aligned_at(mi_heap_t* heap, void* p, size_t newsize, size_t alignment, size_t offset);

476void* mi_heap_recalloc_aligned(mi_heap_t* heap, void* p, size_t newcount, size_t size, size_t alignment);

477void* mi_heap_recalloc_aligned_at(mi_heap_t* heap, void* p, size_t newcount, size_t size, size_t alignment, size_t offset);

478

480

481

482

500

506struct mi_heap_s;

507

513typedef struct mi_heap_s mi_heap_t;

514

516mi_heap_t* mi_heap_new();

517

524void mi_heap_delete(mi_heap_t* heap);

525

532void mi_heap_destroy(mi_heap_t* heap);

533

538mi_heap_t* mi_heap_set_default(mi_heap_t* heap);

539

543mi_heap_t* mi_heap_get_default();

544

551mi_heap_t* mi_heap_get_backing();

552

556void mi_heap_set_numa_affinity(mi_heap_t* heap, int numa_node);

557

563mi_heap_t* mi_heap_main(void);

564

570mi_heap_t* mi_heap_of(const void* p);

571

576bool mi_heap_contains(const mi_heap_t* heap, const void* p);

577

581bool mi_any_heap_contains(const void* p);

582

583

589bool mi_is_in_heap_region(const void* p);

590

596bool mi_check_owned(const void* p);

597

604bool mi_heap_contains_block(mi_heap_t* heap, const void* p);

605

612bool mi_heap_check_owned(mi_heap_t* heap, const void* p);

613

615void mi_heap_collect(mi_heap_t* heap, bool force);

616

619void* mi_heap_malloc(mi_heap_t* heap, size_t size);

620

624void* mi_heap_malloc_small(mi_heap_t* heap, size_t size);

625

628void* mi_heap_zalloc(mi_heap_t* heap, size_t size);

629

633void* mi_heap_zalloc_small(mi_heap_t* heap, size_t size);

634

637void* mi_heap_calloc(mi_heap_t* heap, size_t count, size_t size);

638

641void* mi_heap_mallocn(mi_heap_t* heap, size_t count, size_t size);

642

645char* mi_heap_strdup(mi_heap_t* heap, const char* s);

646

649char* mi_heap_strndup(mi_heap_t* heap, const char* s, size_t n);

650

653char* mi_heap_realpath(mi_heap_t* heap, const char* fname, char* resolved_name);

654

655void* mi_heap_realloc(mi_heap_t* heap, void* p, size_t newsize);

656void* mi_heap_reallocn(mi_heap_t* heap, void* p, size_t count, size_t size);

657void* mi_heap_reallocf(mi_heap_t* heap, void* p, size_t newsize);

658

659void* mi_heap_malloc_aligned(mi_heap_t* heap, size_t size, size_t alignment);

660void* mi_heap_malloc_aligned_at(mi_heap_t* heap, size_t size, size_t alignment, size_t offset);

661void* mi_heap_zalloc_aligned(mi_heap_t* heap, size_t size, size_t alignment);

662void* mi_heap_zalloc_aligned_at(mi_heap_t* heap, size_t size, size_t alignment, size_t offset);

663void* mi_heap_calloc_aligned(mi_heap_t* heap, size_t count, size_t size, size_t alignment);

664void* mi_heap_calloc_aligned_at(mi_heap_t* heap, size_t count, size_t size, size_t alignment, size_t offset);

665void* mi_heap_realloc_aligned(mi_heap_t* heap, void* p, size_t newsize, size_t alignment);

666void* mi_heap_realloc_aligned_at(mi_heap_t* heap, void* p, size_t newsize, size_t alignment, size_t offset);

667

669

670

671

676

677

680typedef struct mi_heap_area_s {

681void* blocks;

682size_t reserved;

683size_t committed;

684size_t used;

685size_t block_size;

686size_t full_block_size;

687intheap_tag;

688} [mi_heap_area_t](group analysis.html#structmi heap area t);

689

697typedef bool (mi_block_visit_fun)(const mi_heap_t* heap, const [mi_heap_area_t](group__analysis.html#structmi heap area__t)* area, void* block, size_t block_size, void* arg);

698

713bool mi_heap_visit_blocks(const mi_heap_t* heap, bool visit_blocks, mi_block_visit_fun* visitor, void* arg);

714

730bool mi_abandoned_visit_blocks(mi_subproc_id_t subproc_id, int heap_tag, bool visit_blocks, mi_block_visit_fun* visitor, void* arg);

731

733

734// ------------------------------------------------------

735// Arenas

736// ------------------------------------------------------

737

745

747typedef int mi_arena_id_t;

748

757intmi_reserve_os_memory(size_t size, bool commit, bool allow_large);

758

766int mi_reserve_os_memory_ex(size_t size, bool commit, bool allow_large, bool exclusive, mi_arena_id_t* arena_id);

767

780int mi_reserve_huge_os_pages_interleave(size_t pages, size_t numa_nodes, size_t timeout_msecs);

781

794int mi_reserve_huge_os_pages_at(size_t pages, int numa_node, size_t timeout_msecs);

795

803intmi_reserve_huge_os_pages_at_ex(size_t pages, int numa_node, size_t timeout_msecs, bool exclusive, mi_arena_id_t* arena_id);

804

807size_t mi_arena_min_alignment(void);

808

820bool mi_manage_os_memory(void* start, size_t size, bool is_committed, bool is_large, bool is_zero, int numa_node);

821

832boolmi_manage_os_memory_ex(void* start, size_t size, bool is_committed, bool is_large, bool is_zero, int numa_node, bool exclusive, mi_arena_id_t* arena_id);

833

834

836void mi_debug_show_arenas(void);

837

842void* mi_arena_area(mi_arena_id_t arena_id, size_t* size);

843

844

845

849mi_heap_t* mi_heap_new_in_arena(mi_arena_id_t arena_id);

850

862mi_heap_t* mi_heap_new_ex(int heap_tag, bool allow_destroy, mi_arena_id_t arena_id);

863

865

866

875

880typedef void* mi_subproc_id_t;

881

883mi_subproc_id_t mi_subproc_main(void);

884

886mi_subproc_id_t mi_subproc_current(void);

887

890mi_subproc_id_t mi_subproc_new(void);

891

895void mi_subproc_destroy(mi_subproc_id_t subproc);

896

901void mi_subproc_delete(mi_subproc_id_t subproc);

902

906void mi_subproc_add_current_thread(mi_subproc_id_t subproc);

907

911typedef bool (mi_heap_visit_fun)(mi_heap_t* heap, void* arg);

912

918bool mi_subproc_visit_heaps(mi_subproc_id_t subproc, mi_heap_visit_fun* visitor, void* arg);

919

921

922

923// ------------------------------------------------------

924// Extended functionality

925// ------------------------------------------------------

926

931

935#define MI_SMALL_SIZE_MAX (128*sizeof(void*))

936

940intmi_version(void);

941

949void mi_collect(bool force);

950

956void mi_thread_set_in_threadpool(void);

957

962bool mi_is_redirected();

963

967void mi_thread_init(void);

968

973void mi_thread_done(void);

974

981typedef void (mi_deferred_free_fun)(bool force, unsigned long long heartbeat, void* arg);

982

998voidmi_register_deferred_free(mi_deferred_free_fun* deferred_free, void* arg);

999

1005typedef void (mi_output_fun)(const char* msg, void* arg);

1006

1013void mi_register_output(mi_output_fun* out, void* arg);

1014

1020typedef void (mi_error_fun)(int err, void* arg);

1021

1037void mi_register_error(mi_error_fun* errfun, void* arg);

1038

1046void* mi_malloc_small(size_t size);

1047

1055void* mi_zalloc_small(size_t size);

1056

1071void mi_free_small(void* p);

1072

1074

1075

1076

1077

1078

1079// ------------------------------------------------------

1080// Statistics

1081// ------------------------------------------------------

1082

1086

1088#define MI_STAT_VERSION 4

1089

1099#define mi_stats_t_decl(name)

1100

1102struct [mi_stats_s](group__stats.html#structmi stats s) {

1104size_t size;

1106size_t version;

1107};

1108

1110typedef struct [mi_stats_s](group stats.html#structmi stats__s) mi_stats_t;

1111

1112

1115void mi_process_info_print(void);

1116

1121void mi_process_info_print_out(mi_output_fun* out, void* arg);

1122

1136void mi_process_info(size_t* elapsed_msecs, size_t* user_msecs, size_t* system_msecs, size_t* current_rss, size_t* peak_rss, size_t* current_commit, size_t* peak_commit, size_t* page_faults);

1137

1138

1143void mi_stats_print(void* out);

1144

1150void mi_stats_print_out(mi_output_fun* out, void* arg);

1151

1157bool mi_stats_get(mi_stats_t* stats);

1158

1164char* mi_stats_get_json(size_t buf_size, char* buf);

1165

1167size_tmi_stats_get_bin_size(size_t bin);

1168

1175bool mi_heap_stats_get(mi_heap_t* heap, mi_stats_t* stats);

1176

1183char* mi_heap_stats_get_json(mi_heap_t* heap, size_t buf_size, char* buf); // use mi_free to free the result if the input buf == NULL

1184

1189void mi_heap_stats_print_out(mi_heap_t* heap, mi_output_fun* out, void* arg);

1190

1194void mi_heap_stats_merge_to_subproc(mi_heap_t* heap);

1195

1202bool mi_subproc_stats_get(mi_subproc_id_t subproc_id, mi_stats_t* stats);

1203

1210char* mi_subproc_stats_get_json(mi_subproc_id_t subproc_id, size_t buf_size, char* buf); // use mi_free to free the result if the input buf == NULL

1211

1216voidmi_subproc_stats_print_out(mi_subproc_id_t subproc_id, mi_output_fun* out, void* arg);

1217

1218

1223void mi_subproc_heap_stats_print_out(mi_subproc_id_t subproc_id, mi_output_fun* out, void* arg);

1224

1231char* mi_stats_as_json( mi_stats_t* stats, size_t buf_size, char* buf);

1232

1234void mi_stats_reset(void);

1235

1237void mi_stats_merge(void);

1238

1240

1241// ------------------------------------------------------

1242// Runtime Options

1243// ------------------------------------------------------

1244

1249

1252void mi_options_print(void);

1253

1259void mi_options_print_out(mi_output_fun* out, void* arg);

1260

1261

1263typedef enum mi_option_e {

1264// stable options

1265mi_option_show_errors,

1266mi_option_show_stats,

1267mi_option_verbose,

1268mi_option_max_errors,

1269mi_option_max_warnings,

1270

1271// advanced options

1272mi_option_reserve_huge_os_pages,

1273mi_option_reserve_huge_os_pages_at,

1274mi_option_reserve_os_memory,

1275mi_option_allow_large_os_pages,

1276mi_option_purge_decommits,

1277mi_option_arena_reserve,

1278mi_option_os_tag,

1279mi_option_retry_on_oom,

1280mi_option_generic_collect,

1281mi_option_allow_thp,

1282

1283// guard pages

1284mi_option_guarded_min,

1285mi_option_guarded_max,

1286mi_option_guarded_precise,

1287mi_option_guarded_sample_rate,

1288mi_option_guarded_sample_seed,

1289

1290// experimental options

1291mi_option_eager_commit,

1292mi_option_eager_commit_delay,

1293mi_option_arena_eager_commit,

1294mi_option_abandoned_page_purge,

1295mi_option_purge_delay,

1296mi_option_use_numa_nodes,

1297mi_option_disallow_os_alloc,

1298mi_option_max_segment_reclaim,

1299mi_option_destroy_on_exit,

1300mi_option_arena_purge_mult,

1301mi_option_abandoned_reclaim_on_free,

1302mi_option_purge_extend_delay,

1303mi_option_disallow_arena_alloc,

1304mi_option_visit_abandoned,

1305mi_option_target_segments_per_thread,

1306

1307// v3 options

1308mi_option_page_reclaim_on_free,

1309mi_option_page_full_retain,

1310mi_option_page_max_candidates,

1311mi_option_max_vabits,

1312mi_option_pagemap_commit,

1313mi_option_page_commit_on_demand,

1314mi_option_page_max_reclaim,

1315mi_option_page_cross_thread_max_reclaim,

1316mi_option_minimal_purge_size,

1317mi_option_arena_max_object_size,

1318

1319_mi_option_last

1320} mi_option_t;

1321

1322

1323boolmi_option_is_enabled(mi_option_t option);

1324voidmi_option_enable(mi_option_t option);

1325voidmi_option_disable(mi_option_t option);

1326voidmi_option_set_enabled(mi_option_t option, bool enable);

1327voidmi_option_set_enabled_default(mi_option_t option, bool enable);

1328

1329longmi_option_get(mi_option_t option);

1330longmi_option_get_clamp(mi_option_t option, long min, long max);

1331size_t mi_option_get_size(mi_option_t option);

1332

1333voidmi_option_set(mi_option_t option, long value);

1334voidmi_option_set_default(mi_option_t option, long value);

1335

1337

1350

1352struct mi_theap_s;

1353

1355typedef struct mi_theap_s mi_theap_t;

1356

1363mi_theap_t* mi_heap_theap(mi_heap_t* heap);

1364

1366void mi_theap_collect(mi_theap_t* theap, bool force);

1367

1372mi_theap_t* mi_theap_set_default(mi_theap_t* theap);

1373

1376mi_theap_t* mi_theap_get_default();

1377

1380void* mi_theap_malloc(mi_theap_t* theap, size_t size);

1381

1385void* mi_theap_malloc_small(mi_theap_t* theap, size_t size);

1386

1389void* mi_theap_zalloc(mi_theap_t* theap, size_t size);

1390

1394void* mi_theap_zalloc_small(mi_theap_t* theap, size_t size);

1395

1396void* mi_theap_calloc(mi_theap_t* theap, size_t count, size_t size);

1397void* mi_theap_malloc_aligned(mi_theap_t* theap, size_t size, size_t alignment);

1398void* mi_theap_realloc(mi_theap_t* theap, void* p, size_t newsize);

1399

1401

1402

1408

1411voidmi_cfree(void* p);

1412void* mi__expand(void* p, size_t newsize);

1413

1414size_t mi_malloc_size(const void* p);

1415size_t mi_malloc_good_size(size_t size);

1416size_t mi_malloc_usable_size(const void *p);

1417

1418int mi_posix_memalign(void** p, size_t alignment, size_t size);

1419int mi__posix_memalign(void** p, size_t alignment, size_t size);

1420void* mi_memalign(size_t alignment, size_t size);

1421void* mi_valloc(size_t size);

1422void* mi_pvalloc(size_t size);

1423void* mi_aligned_alloc(size_t alignment, size_t size);

1424

1425unsigned short* mi_wcsdup(const unsigned short* s);

1426unsigned char* mi_mbsdup(const unsigned char* s);

1427int mi_dupenv_s(char** buf, size_t* size, const char* name);

1428int mi_wdupenv_s(unsigned short** buf, size_t* size, const unsigned short* name);

1429

1432void* mi_reallocarray(void* p, size_t count, size_t size);

1433

1435intmi_reallocarr(void* p, size_t count, size_t size);

1436

1437void* mi_aligned_recalloc(void* p, size_t newcount, size_t size, size_t alignment);

1438void* mi_aligned_offset_recalloc(void* p, size_t newcount, size_t size, size_t alignment, size_t offset);

1439

1447void mi_free_size(void* p, size_t size);

1448

1454void mi_free_size_aligned(void* p, size_t size, size_t alignment);

1455

1456void mi_free_aligned(void* p, size_t alignment);

1457

1459

1472

1474void* mi_new(std::size_t n) noexcept(false);

1475

1477void* mi_new_n(size_t count, size_t size) noexcept(false);

1478

1480void* mi_new_aligned(std::size_t n, std::align_val_t alignment) noexcept(false);

1481

1483void* mi_new_nothrow(size_t n);

1484

1486void* mi_new_aligned_nothrow(size_t n, size_t alignment);

1487

1489void* mi_new_realloc(void* p, size_t newsize);

1490

1492void* mi_new_reallocn(void* p, size_t newcount, size_t size);

1493

1501template<class T> struct [mi_stl_allocator](group__cpp.html#structmi stl allocator) { }

1502

1504

mi_malloc_aligned_at

void * mi_malloc_aligned_at(size_t size, size_t alignment, size_t offset)

Allocate size bytes aligned by alignment at a specified offset.

mi_calloc_aligned

void * mi_calloc_aligned(size_t count, size_t size, size_t alignment)

mi_realloc_aligned

void * mi_realloc_aligned(void *p, size_t newsize, size_t alignment)

mi_malloc_aligned

void * mi_malloc_aligned(size_t size, size_t alignment)

Allocate size bytes aligned by alignment.

mi_zalloc_aligned_at

void * mi_zalloc_aligned_at(size_t size, size_t alignment, size_t offset)

mi_calloc_aligned_at

void * mi_calloc_aligned_at(size_t count, size_t size, size_t alignment, size_t offset)

mi_zalloc_aligned

void * mi_zalloc_aligned(size_t size, size_t alignment)

mi_realloc_aligned_at

void * mi_realloc_aligned_at(void *p, size_t newsize, size_t alignment, size_t offset)

mi_heap_area_t::heap_tag

int heap_tag

heap tag associated with this area (see mi_heap_new_ex)

Definition mimalloc-doc.h:687

mi_heap_area_t::block_size

size_t block_size

size in bytes of one block

Definition mimalloc-doc.h:685

mi_heap_area_t::committed

size_t committed

current committed bytes of this area

Definition mimalloc-doc.h:683

mi_heap_area_t::full_block_size

size_t full_block_size

size in bytes of a full block including padding and metadata.

Definition mimalloc-doc.h:686

mi_heap_area_t::used

size_t used

bytes in use by allocated blocks

Definition mimalloc-doc.h:684

mi_heap_area_t::blocks

void * blocks

start of the area containing heap blocks

Definition mimalloc-doc.h:681

mi_heap_area_t::reserved

size_t reserved

bytes reserved for this area

Definition mimalloc-doc.h:682

mi_abandoned_visit_blocks

bool mi_abandoned_visit_blocks(mi_subproc_id_t subproc_id, int heap_tag, bool visit_blocks, mi_block_visit_fun *visitor, void *arg)

v1,v2: Visit all areas and blocks in abandoned heaps.

mi_block_visit_fun

bool mi_block_visit_fun(const mi_heap_t *heap, const mi_heap_area_t *area, void *block, size_t block_size, void *arg)

Visitor function passed to mi_heap_visit_blocks()

Definition mimalloc-doc.h:697

mi_heap_visit_blocks

bool mi_heap_visit_blocks(const mi_heap_t *heap, bool visit_blocks, mi_block_visit_fun *visitor, void *arg)

Visit all areas and blocks in a heap.

[mi_heap_area_t](group analysis.html#structmi heap area t)

An area of heap space contains blocks of a single size.

Definition mimalloc-doc.h:680

mi_reserve_os_memory

int mi_reserve_os_memory(size_t size, bool commit, bool allow_large)

Reserve OS memory for use by mimalloc.

mi_reserve_huge_os_pages_interleave

int mi_reserve_huge_os_pages_interleave(size_t pages, size_t numa_nodes, size_t timeout_msecs)

Reserve pages of huge OS pages (1GiB) evenly divided over numa_nodes nodes, but stops after at most t...

mi_reserve_os_memory_ex

int mi_reserve_os_memory_ex(size_t size, bool commit, bool allow_large, bool exclusive, mi_arena_id_t *arena_id)

Reserve OS memory to be managed in an arena.

mi_heap_new_ex

mi_heap_t * mi_heap_new_ex(int heap_tag, bool allow_destroy, mi_arena_id_t arena_id)

v1,v2: Create a new heap.

mi_manage_os_memory_ex

bool mi_manage_os_memory_ex(void *start, size_t size, bool is_committed, bool is_large, bool is_zero, int numa_node, bool exclusive, mi_arena_id_t *arena_id)

Manage externally allocated memory as a mimalloc arena.

mi_manage_os_memory

bool mi_manage_os_memory(void *start, size_t size, bool is_committed, bool is_large, bool is_zero, int numa_node)

Manage a particular memory area for use by mimalloc.

mi_reserve_huge_os_pages_at_ex

int mi_reserve_huge_os_pages_at_ex(size_t pages, int numa_node, size_t timeout_msecs, bool exclusive, mi_arena_id_t *arena_id)

Reserve huge OS pages (1GiB) into a single arena.

mi_reserve_huge_os_pages_at

int mi_reserve_huge_os_pages_at(size_t pages, int numa_node, size_t timeout_msecs)

Reserve pages of huge OS pages (1GiB) at a specific numa_node, but stops after at most timeout_msecs ...

mi_debug_show_arenas

void mi_debug_show_arenas(void)

Show all current arena's.

mi_arena_id_t

int mi_arena_id_t

Each arena has an associated identifier.

Definition mimalloc-doc.h:747

mi_arena_area

void * mi_arena_area(mi_arena_id_t arena_id, size_t *size)

Return the start and size of an arena.

mi_arena_min_alignment

size_t mi_arena_min_alignment(void)

Return the minimal alignment required for managed OS memory.

mi_heap_new_in_arena

mi_heap_t * mi_heap_new_in_arena(mi_arena_id_t arena_id)

Create a new heap that only allocates in the specified arena.

mi_theap_malloc_csize

void * mi_theap_malloc_csize(mi_theap_t *theap, size_t size)

mi_theap_zalloc_csize

void * mi_theap_zalloc_csize(mi_theap_t *theap, size_t size)

mi_free_csize

void mi_free_csize(void *p, size_t size)

Free a pointer with a known constant size.

mi_malloc_csize

void * mi_malloc_csize(size_t size)

Allocate a constant size object.

mi_zalloc_csize

void * mi_zalloc_csize(size_t size)

mi_new_nothrow

void * mi_new_nothrow(size_t n)

like mi_malloc, but when out of memory, use std::get_new_handler but return NULL on failure.

mi_new

void * mi_new(std::size_t n) noexcept(false)

like mi_malloc(), but when out of memory, use std::get_new_handler and raise std::bad_alloc exception...

mi_new_realloc

void * mi_new_realloc(void *p, size_t newsize)

like mi_realloc(), but when out of memory, use std::get_new_handler and raise std::bad_alloc exceptio...

mi_new_aligned

void * mi_new_aligned(std::size_t n, std::align_val_t alignment) noexcept(false)

like mi_malloc_aligned(), but when out of memory, use std::get_new_handler and raise std::bad_alloc e...

mi_new_aligned_nothrow

void * mi_new_aligned_nothrow(size_t n, size_t alignment)

like mi_malloc_aligned, but when out of memory, use std::get_new_handler but return NULL on failure.

mi_new_reallocn

void * mi_new_reallocn(void *p, size_t newcount, size_t size)

like mi_reallocn(), but when out of memory, use std::get_new_handler and raise std::bad_alloc excepti...

mi_new_n

void * mi_new_n(size_t count, size_t size) noexcept(false)

like mi_mallocn(), but when out of memory, use std::get_new_handler and raise std::bad_alloc exceptio...

[mi_stl_allocator](group cpp.html#structmi stl__allocator)

std::allocator implementation for mimalloc for use in STL containers. For example:

Definition mimalloc-doc.h:1501

mi_thread_done

void mi_thread_done(void)

Uninitialize mimalloc on a thread.

mi_deferred_free_fun

void mi_deferred_free_fun(bool force, unsigned long long heartbeat, void *arg)

Type of deferred free functions.

Definition mimalloc-doc.h:981

mi_free_small

void mi_free_small(void *p)

v3: Can be used to free an object that was allocated with mi_malloc_small() or any allocation with a ...

mi_register_deferred_free

void mi_register_deferred_free(mi_deferred_free_fun *deferred_free, void *arg)

Register a deferred free function.

mi_collect

void mi_collect(bool force)

Eagerly free memory.

mi_zalloc_small

void * mi_zalloc_small(size_t size)

Allocate a zero initialized small object.

mi_malloc_small

void * mi_malloc_small(size_t size)

Allocate a small object.

mi_error_fun

void mi_error_fun(int err, void *arg)

Type of error callback functions.

Definition mimalloc-doc.h:1020

mi_register_error

void mi_register_error(mi_error_fun *errfun, void *arg)

Register an error callback function.

mi_is_redirected

bool mi_is_redirected()

Is the C runtime malloc API redirected?

mi_thread_set_in_threadpool

void mi_thread_set_in_threadpool(void)

v3: Communicate that a thread is in a threadpool.

mi_output_fun

void mi_output_fun(const char *msg, void *arg)

Type of output functions.

Definition mimalloc-doc.h:1005

mi_register_output

void mi_register_output(mi_output_fun *out, void *arg)

Register an output function.

mi_version

int mi_version(void)

Return the mimalloc version.

mi_thread_init

void mi_thread_init(void)

Initialize mimalloc on a thread.

mi_heap_malloc_small

void * mi_heap_malloc_small(mi_heap_t *heap, size_t size)

Allocate a small object in a specific heap.

mi_heap_zalloc_small

void * mi_heap_zalloc_small(mi_heap_t *heap, size_t size)

Allocate a small object in a specific heap.

mi_heap_check_owned

bool mi_heap_check_owned(mi_heap_t *heap, const void *p)

v1,v2: Check safely if any pointer is part of a heap.

mi_heap_get_default

mi_heap_t * mi_heap_get_default()

v1,v2: Get the default heap that is used for mi_malloc() et al.

mi_any_heap_contains

bool mi_any_heap_contains(const void *p)

v3: is a pointer pointing into mimalloc managed memory?

mi_heap_delete

void mi_heap_delete(mi_heap_t *heap)

Delete a previously allocated heap.

mi_heap_malloc_aligned

void * mi_heap_malloc_aligned(mi_heap_t *heap, size_t size, size_t alignment)

mi_heap_set_default

mi_heap_t * mi_heap_set_default(mi_heap_t *heap)

v1,v2: Set the default heap to use in the current thread for mi_malloc() et al.

mi_heap_t

struct mi_heap_s mi_heap_t

Type of first-class heaps.

Definition mimalloc-doc.h:513

mi_heap_of

mi_heap_t * mi_heap_of(const void *p)

v3: return the heap that contains the given pointer.

mi_heap_zalloc_aligned_at

void * mi_heap_zalloc_aligned_at(mi_heap_t *heap, size_t size, size_t alignment, size_t offset)

mi_heap_realpath

char * mi_heap_realpath(mi_heap_t *heap, const char *fname, char *resolved_name)

Resolve a file path name using a specific heap to allocate the result.

mi_heap_strdup

char * mi_heap_strdup(mi_heap_t *heap, const char *s)

Duplicate a string in a specific heap.

mi_is_in_heap_region

bool mi_is_in_heap_region(const void *p)

v1,v2: Is a pointer part of our heap?

mi_check_owned

bool mi_check_owned(const void *p)

v1,v2: Check if any pointer is part of the default heap of this thread.

mi_heap_zalloc_aligned

void * mi_heap_zalloc_aligned(mi_heap_t *heap, size_t size, size_t alignment)

mi_heap_realloc_aligned_at

void * mi_heap_realloc_aligned_at(mi_heap_t *heap, void *p, size_t newsize, size_t alignment, size_t offset)

mi_heap_collect

void mi_heap_collect(mi_heap_t *heap, bool force)

Release outstanding resources in a specific heap.

mi_heap_main

mi_heap_t * mi_heap_main(void)

v3: the main heap (of the current sub-process)

mi_heap_destroy

void mi_heap_destroy(mi_heap_t *heap)

Destroy a heap, freeing all its still allocated blocks.

mi_heap_calloc_aligned_at

void * mi_heap_calloc_aligned_at(mi_heap_t *heap, size_t count, size_t size, size_t alignment, size_t offset)

mi_heap_new

mi_heap_t * mi_heap_new()

Create a new heap that can be used for allocation.

mi_heap_contains_block

bool mi_heap_contains_block(mi_heap_t *heap, const void *p)

v1,v2: Does a heap contain a pointer to a previously allocated block?

mi_heap_set_numa_affinity

void mi_heap_set_numa_affinity(mi_heap_t *heap, int numa_node)

v3: set NUMA affinity for a heap.

mi_heap_mallocn

void * mi_heap_mallocn(mi_heap_t *heap, size_t count, size_t size)

Allocate count elements in a specific heap.

mi_heap_malloc

void * mi_heap_malloc(mi_heap_t *heap, size_t size)

Allocate in a specific heap.

mi_heap_zalloc

void * mi_heap_zalloc(mi_heap_t *heap, size_t size)

Allocate zero-initialized in a specific heap.

mi_heap_calloc

void * mi_heap_calloc(mi_heap_t *heap, size_t count, size_t size)

Allocate count zero-initialized elements in a specific heap.

mi_heap_realloc

void * mi_heap_realloc(mi_heap_t *heap, void *p, size_t newsize)

mi_heap_get_backing

mi_heap_t * mi_heap_get_backing()

v1,v2: Get the backing heap.

mi_heap_contains

bool mi_heap_contains(const mi_heap_t *heap, const void *p)

v3: does a heap contain a specific pointer?

mi_heap_calloc_aligned

void * mi_heap_calloc_aligned(mi_heap_t *heap, size_t count, size_t size, size_t alignment)

mi_heap_reallocn

void * mi_heap_reallocn(mi_heap_t *heap, void *p, size_t count, size_t size)

mi_heap_realloc_aligned

void * mi_heap_realloc_aligned(mi_heap_t *heap, void *p, size_t newsize, size_t alignment)

mi_heap_strndup

char * mi_heap_strndup(mi_heap_t *heap, const char *s, size_t n)

Duplicate a string of at most length n in a specific heap.

mi_heap_reallocf

void * mi_heap_reallocf(mi_heap_t *heap, void *p, size_t newsize)

mi_heap_malloc_aligned_at

void * mi_heap_malloc_aligned_at(mi_heap_t *heap, size_t size, size_t alignment, size_t offset)

mi_realloc

void * mi_realloc(void *p, size_t newsize)

Re-allocate memory to newsize bytes.

mi_usable_size

size_t mi_usable_size(void *p)

Return the available bytes in a memory block.

mi_expand

void * mi_expand(void *p, size_t newsize)

Try to re-allocate memory to newsize bytes in place.

mi_strdup

char * mi_strdup(const char *s)

Allocate and duplicate a string.

mi_strndup

char * mi_strndup(const char *s, size_t n)

Allocate and duplicate a string up to n bytes.

mi_reallocf

void * mi_reallocf(void *p, size_t newsize)

Re-allocate memory to newsize bytes,.

mi_mallocn

void * mi_mallocn(size_t count, size_t size)

Allocate count elements of size bytes.

mi_calloc

void * mi_calloc(size_t count, size_t size)

Allocate zero-initialized count elements of size bytes.

mi_reallocn

void * mi_reallocn(void *p, size_t count, size_t size)

Re-allocate memory to count elements of size bytes.

mi_realpath

char * mi_realpath(const char *fname, char *resolved_name)

Resolve a file path name.

mi_good_size

size_t mi_good_size(size_t size)

Return the probable allocation block size for a given required size.

mi_malloc

void * mi_malloc(size_t size)

Allocate size bytes.

mi_zalloc

void * mi_zalloc(size_t size)

Allocate zero-initialized size bytes.

mi_free

void mi_free(void *p)

Free previously allocated memory.

mi_option_enable

void mi_option_enable(mi_option_t option)

mi_options_print_out

void mi_options_print_out(mi_output_fun *out, void *arg)

Print out all process info.

mi_option_get_size

size_t mi_option_get_size(mi_option_t option)

mi_option_is_enabled

bool mi_option_is_enabled(mi_option_t option)

mi_option_set_enabled_default

void mi_option_set_enabled_default(mi_option_t option, bool enable)

mi_option_get

long mi_option_get(mi_option_t option)

mi_option_set_default

void mi_option_set_default(mi_option_t option, long value)

mi_option_get_clamp

long mi_option_get_clamp(mi_option_t option, long min, long max)

mi_option_set_enabled

void mi_option_set_enabled(mi_option_t option, bool enable)

mi_option_disable

void mi_option_disable(mi_option_t option)

mi_options_print

void mi_options_print(void)

Print out all runtime parameters for mimalloc. Also printed with MIMALLOC_VERBOSE=1 at startup.

mi_option_set

void mi_option_set(mi_option_t option, long value)

mi_option_t

mi_option_t

Runtime options.

Definition mimalloc-doc.h:1263

mi_option_guarded_min

@ mi_option_guarded_min

only used when building with MI_GUARDED: minimal rounded object size for guarded objects (=0)

Definition mimalloc-doc.h:1284

mi_option_abandoned_reclaim_on_free

@ mi_option_abandoned_reclaim_on_free

v1,v2: allow to reclaim an abandoned segment on a free (=1)

Definition mimalloc-doc.h:1301

mi_option_purge_extend_delay

@ mi_option_purge_extend_delay

v1,v2: extend purge delay on each subsequent delay (=1)

Definition mimalloc-doc.h:1302

mi_option_allow_thp

@ mi_option_allow_thp

allow transparent huge pages? (=1) (on Android =0 by default). Set to 0 to disable THP for the proces...

Definition mimalloc-doc.h:1281

mi_option_show_stats

@ mi_option_show_stats

Print statistics on termination.

Definition mimalloc-doc.h:1266

mi_option_use_numa_nodes

@ mi_option_use_numa_nodes

0 = use all available numa nodes, otherwise use at most N nodes.

Definition mimalloc-doc.h:1296

mi_option_page_max_reclaim

@ mi_option_page_max_reclaim

v3: don't reclaim pages of the same originating theap if we already own N pages (in that size class) ...

Definition mimalloc-doc.h:1314

mi_option_abandoned_page_purge

@ mi_option_abandoned_page_purge

v1,v2: immediately purge delayed purges on thread termination

Definition mimalloc-doc.h:1294

mi_option_eager_commit_delay

@ mi_option_eager_commit_delay

v2: the first N segments per thread are not eagerly committed (but per page in the segment on demand)

Definition mimalloc-doc.h:1292

mi_option_eager_commit

@ mi_option_eager_commit

v1,v2: eager commit segments? (after eager_commit_delay segments) (enabled by default).

Definition mimalloc-doc.h:1291

mi_option_guarded_precise

@ mi_option_guarded_precise

disregard minimal alignment requirement to always place guarded blocks exactly in front of a guard pa...

Definition mimalloc-doc.h:1286

mi_option_visit_abandoned

@ mi_option_visit_abandoned

allow visiting heap blocks from abandoned threads (=0)

Definition mimalloc-doc.h:1304

mi_option_os_tag

@ mi_option_os_tag

tag used for OS logging (macOS only for now) (=100)

Definition mimalloc-doc.h:1278

mi_option_arena_max_object_size

@ mi_option_arena_max_object_size

v3: set maximal object size that can be allocated in an arena (in KiB) (=2GiB on 64-bit).

Definition mimalloc-doc.h:1317

mi_option_minimal_purge_size

@ mi_option_minimal_purge_size

v3: set minimal purge size (in KiB) (=0). By default set to either 64 or 2048 if THP is enabled....

Definition mimalloc-doc.h:1316

_mi_option_last

@ _mi_option_last

Definition mimalloc-doc.h:1319

mi_option_destroy_on_exit

@ mi_option_destroy_on_exit

if set, release all memory on exit; sometimes used for dynamic unloading but can be unsafe

Definition mimalloc-doc.h:1299

mi_option_page_cross_thread_max_reclaim

@ mi_option_page_cross_thread_max_reclaim

v3: don't reclaim pages across threads if we already own N pages (in that size class) (=16)

Definition mimalloc-doc.h:1315

mi_option_page_commit_on_demand

@ mi_option_page_commit_on_demand

v3: commit page memory on-demand (=0)

Definition mimalloc-doc.h:1313

mi_option_guarded_sample_seed

@ mi_option_guarded_sample_seed

can be set to allow for a (more) deterministic re-execution when a guard page is triggered (=0)

Definition mimalloc-doc.h:1288

mi_option_verbose

@ mi_option_verbose

Print verbose messages.

Definition mimalloc-doc.h:1267

mi_option_allow_large_os_pages

@ mi_option_allow_large_os_pages

allow large (2 or 4 MiB) OS pages, implies eager commit.

Definition mimalloc-doc.h:1275

mi_option_arena_purge_mult

@ mi_option_arena_purge_mult

multiplier for purge_delay for the purging delay for arenas (=10)

Definition mimalloc-doc.h:1300

mi_option_target_segments_per_thread

@ mi_option_target_segments_per_thread

v1,v2: experimental (=0)

Definition mimalloc-doc.h:1305

mi_option_generic_collect

@ mi_option_generic_collect

collect heaps every N (=10000) generic allocation calls

Definition mimalloc-doc.h:1280

mi_option_retry_on_oom

@ mi_option_retry_on_oom

retry on out-of-memory for N milli seconds (=400), set to 0 to disable retries. (only on windows)

Definition mimalloc-doc.h:1279

mi_option_guarded_max

@ mi_option_guarded_max

only used when building with MI_GUARDED: maximal rounded object size for guarded objects (=0)

Definition mimalloc-doc.h:1285

mi_option_purge_decommits

@ mi_option_purge_decommits

should a memory purge decommit? (=1). Set to 0 to use memory reset on a purge (instead of decommit)

Definition mimalloc-doc.h:1276

mi_option_reserve_huge_os_pages_at

@ mi_option_reserve_huge_os_pages_at

Reserve N huge OS pages at a specific NUMA node N.

Definition mimalloc-doc.h:1273

mi_option_pagemap_commit

@ mi_option_pagemap_commit

v3: commit the full pagemap (to always catch invalid pointer uses) (=0)

Definition mimalloc-doc.h:1312

mi_option_max_segment_reclaim

@ mi_option_max_segment_reclaim

v2: max. percentage of the abandoned segments can be reclaimed per try (=10%)

Definition mimalloc-doc.h:1298

mi_option_max_vabits

@ mi_option_max_vabits

v3: max user space virtual address bits to consider (=48)

Definition mimalloc-doc.h:1311

mi_option_arena_reserve

@ mi_option_arena_reserve

initial memory size for arena reservation (= 1 GiB on 64-bit) (internally, this value is in KiB; use ...

Definition mimalloc-doc.h:1277

mi_option_page_reclaim_on_free

@ mi_option_page_reclaim_on_free

v3: reclaim abandoned pages on a free (=0). -1 disallowr always, 0 allows if the page originated from...

Definition mimalloc-doc.h:1308

mi_option_reserve_huge_os_pages

@ mi_option_reserve_huge_os_pages

reserve N huge OS pages (1GiB pages) at startup

Definition mimalloc-doc.h:1272

mi_option_page_max_candidates

@ mi_option_page_max_candidates

v3: max candidate pages to consider for allocation (=4)

Definition mimalloc-doc.h:1310

mi_option_disallow_os_alloc

@ mi_option_disallow_os_alloc

1 = do not use OS memory for allocation (but only programmatically reserved arenas)

Definition mimalloc-doc.h:1297

mi_option_purge_delay

@ mi_option_purge_delay

memory purging is delayed by N milli seconds; use 0 for immediate purging or -1 for no purging at all...

Definition mimalloc-doc.h:1295

mi_option_disallow_arena_alloc

@ mi_option_disallow_arena_alloc

1 = do not use arena's for allocation (except if using specific arena id's)

Definition mimalloc-doc.h:1303

mi_option_guarded_sample_rate

@ mi_option_guarded_sample_rate

1 out of N allocations in the min/max range will be guarded (=1000)

Definition mimalloc-doc.h:1287

mi_option_max_errors

@ mi_option_max_errors

issue at most N error messages

Definition mimalloc-doc.h:1268

mi_option_page_full_retain

@ mi_option_page_full_retain

v3: retain N full (small) pages per size class (=2). Use -1 for infinite (as in v1,...

Definition mimalloc-doc.h:1309

mi_option_max_warnings

@ mi_option_max_warnings

issue at most N warning messages

Definition mimalloc-doc.h:1269

mi_option_show_errors

@ mi_option_show_errors

Print error messages.

Definition mimalloc-doc.h:1265

mi_option_reserve_os_memory

@ mi_option_reserve_os_memory

reserve specified amount of OS memory in an arena at startup (internally, this value is in KiB; use m...

Definition mimalloc-doc.h:1274

mi_option_arena_eager_commit

@ mi_option_arena_eager_commit

eager commit arenas? Use 2 to enable just on overcommit systems (=2)

Definition mimalloc-doc.h:1293

mi_malloc_usable_size

size_t mi_malloc_usable_size(const void *p)

mi_free_aligned

void mi_free_aligned(void *p, size_t alignment)

mi_aligned_offset_recalloc

void * mi_aligned_offset_recalloc(void *p, size_t newcount, size_t size, size_t alignment, size_t offset)

mi_aligned_alloc

void * mi_aligned_alloc(size_t alignment, size_t size)

mi_malloc_size

size_t mi_malloc_size(const void *p)

mi_valloc

void * mi_valloc(size_t size)

mi_pvalloc

void * mi_pvalloc(size_t size)

mi__expand

void * mi__expand(void *p, size_t newsize)

mi_wdupenv_s

int mi_wdupenv_s(unsigned short **buf, size_t *size, const unsigned short *name)

mi_cfree

void mi_cfree(void *p)

Checked free: just as mi_free but always checks if the pointer p belongs to our heap and is safe to u...

mi_memalign

void * mi_memalign(size_t alignment, size_t size)

mi_free_size_aligned

void mi_free_size_aligned(void *p, size_t size, size_t alignment)

Free an object that was allocated aligned.

mi_mbsdup

unsigned char * mi_mbsdup(const unsigned char *s)

mi_reallocarr

int mi_reallocarr(void *p, size_t count, size_t size)

Corresponds to reallocarr in NetBSD.

mi_malloc_good_size

size_t mi_malloc_good_size(size_t size)

mi_wcsdup

unsigned short * mi_wcsdup(const unsigned short *s)

mi_dupenv_s

int mi_dupenv_s(char **buf, size_t *size, const char *name)

mi_posix_memalign

int mi_posix_memalign(void **p, size_t alignment, size_t size)

mi__posix_memalign

int mi__posix_memalign(void **p, size_t alignment, size_t size)

mi_reallocarray

void * mi_reallocarray(void *p, size_t count, size_t size)

Correspond s to reallocarray in FreeBSD.

mi_free_size

void mi_free_size(void *p, size_t size)

Free an object that was allocated with a known size.

mi_aligned_recalloc

void * mi_aligned_recalloc(void *p, size_t newcount, size_t size, size_t alignment)

mi_stats_s::version

size_t version

initialize with `MI_STAT_VERSION (so linking dynamically with a separately compiled mimalloc is safe)

Definition mimalloc-doc.h:1106

mi_stats_s::size

size_t size

initialize with sizeof(mi_stats_t) (so linking dynamically with a separately compiled mimalloc is saf...

Definition mimalloc-doc.h:1104

mi_process_info_print_out

void mi_process_info_print_out(mi_output_fun *out, void *arg)

Print out all process info.

mi_subproc_heap_stats_print_out

void mi_subproc_heap_stats_print_out(mi_subproc_id_t subproc_id, mi_output_fun *out, void *arg)

v3: Print statistics for a given subprocess with each heap separately printed.

mi_heap_stats_get

bool mi_heap_stats_get(mi_heap_t *heap, mi_stats_t *stats)

v3: Return statistics for a given heap.

mi_stats_print

void mi_stats_print(void *out)

Deprecated.

mi_stats_reset

void mi_stats_reset(void)

v1,v2: Reset statistics.

mi_stats_print_out

void mi_stats_print_out(mi_output_fun *out, void *arg)

Print statistics of the current subprocess aggregated over all its heaps.

mi_subproc_stats_print_out

void mi_subproc_stats_print_out(mi_subproc_id_t subproc_id, mi_output_fun *out, void *arg)

v3: Print the subproc statistics aggregated over all its heaps.

mi_heap_stats_merge_to_subproc

void mi_heap_stats_merge_to_subproc(mi_heap_t *heap)

v3: xplicitly merge the statistics of the current heap with the subprocess.

mi_subproc_stats_get

bool mi_subproc_stats_get(mi_subproc_id_t subproc_id, mi_stats_t *stats)

v3: Get statistics for a given subprocess aggregated over all its heaps.

mi_stats_as_json

char * mi_stats_as_json(mi_stats_t *stats, size_t buf_size, char *buf)

v3: Show the given statistics as JSON.

mi_process_info

void mi_process_info(size_t *elapsed_msecs, size_t *user_msecs, size_t *system_msecs, size_t *current_rss, size_t *peak_rss, size_t *current_commit, size_t *peak_commit, size_t *page_faults)

Return process information (time and memory usage).

mi_stats_merge

void mi_stats_merge(void)

v1,v2: Merge thread local statistics with the main statistics and reset.

mi_stats_get

bool mi_stats_get(mi_stats_t *stats)

Get the statistics for the current subprocess aggregated over all its heaps.

mi_heap_stats_get_json

char * mi_heap_stats_get_json(mi_heap_t *heap, size_t buf_size, char *buf)

v3: Get the statistics for a heap as JSON.

mi_subproc_stats_get_json

char * mi_subproc_stats_get_json(mi_subproc_id_t subproc_id, size_t buf_size, char *buf)

v3: Show the subproc statistics aggregated over all its heaps as JSON.

mi_stats_get_json

char * mi_stats_get_json(size_t buf_size, char *buf)

Get the statistics for the current subprocess aggregated over all its heaps as JSON.

mi_stats_get_bin_size

size_t mi_stats_get_bin_size(size_t bin)

v3: Return the block size for the given bin.

mi_process_info_print

void mi_process_info_print(void)

Print out all process info.

mi_heap_stats_print_out

void mi_heap_stats_print_out(mi_heap_t *heap, mi_output_fun *out, void *arg)

v3: Show the heap statistics as JSON.

[mi_stats_s](group stats.html#structmi stats__s)

Statistics. See include/mimalloc-stats.h for the full definition.

Definition mimalloc-doc.h:1102

mi_subproc_main

mi_subproc_id_t mi_subproc_main(void)

Get the main sub-process identifier.

mi_heap_visit_fun

bool mi_heap_visit_fun(mi_heap_t *heap, void *arg)

The type of a heap visitor function.

Definition mimalloc-doc.h:911

mi_subproc_new

mi_subproc_id_t mi_subproc_new(void)

Create a fresh sub-process (with no associated threads yet).

mi_subproc_id_t

void * mi_subproc_id_t

A process can associate threads with sub-processes.

Definition mimalloc-doc.h:880

mi_subproc_delete

void mi_subproc_delete(mi_subproc_id_t subproc)

v1,v2: Delete a previously created sub-process.

mi_subproc_current

mi_subproc_id_t mi_subproc_current(void)

Get the current sub-process identifier of this thread.

mi_subproc_destroy

void mi_subproc_destroy(mi_subproc_id_t subproc)

v3: Destroy a previously created sub-process.

mi_subproc_add_current_thread

void mi_subproc_add_current_thread(mi_subproc_id_t subproc)

Add the current thread to the given sub-process.

mi_subproc_visit_heaps

bool mi_subproc_visit_heaps(mi_subproc_id_t subproc, mi_heap_visit_fun *visitor, void *arg)

Visit all heaps belonging to a subprocess.

mi_theap_set_default

mi_theap_t * mi_theap_set_default(mi_theap_t *theap)

Set the default thread-local theap to use in the current thread for mi_malloc() et al.

mi_theap_realloc

void * mi_theap_realloc(mi_theap_t *theap, void *p, size_t newsize)

mi_theap_malloc_small

void * mi_theap_malloc_small(mi_theap_t *theap, size_t size)

Allocate a small object in a specific theap. size must be smaller or equal to MI_SMALL_SIZE_MAX().

mi_theap_get_default

mi_theap_t * mi_theap_get_default()

Get the default theap that is used for mi_malloc() et al. for the current thread.

mi_heap_theap

mi_theap_t * mi_heap_theap(mi_heap_t *heap)

Return the thread-local theap for the given heap.

mi_theap_malloc_aligned

void * mi_theap_malloc_aligned(mi_theap_t *theap, size_t size, size_t alignment)

mi_theap_t

struct mi_theap_s mi_theap_t

Type of thread-local heaps.

Definition mimalloc-doc.h:1355

mi_theap_collect

void mi_theap_collect(mi_theap_t *theap, bool force)

Release outstanding resources in a specific theap.

mi_theap_zalloc

void * mi_theap_zalloc(mi_theap_t *theap, size_t size)

Allocate zero-initialized in a specific heap.

mi_theap_zalloc_small

void * mi_theap_zalloc_small(mi_theap_t *theap, size_t size)

Allocate a small object in a specific theap. size must be smaller or equal to MI_SMALL_SIZE_MAX().

mi_theap_malloc

void * mi_theap_malloc(mi_theap_t *theap, size_t size)

Allocate in a specific theap.

mi_theap_calloc

void * mi_theap_calloc(mi_theap_t *theap, size_t count, size_t size)

mi_heap_recalloc_aligned_at

void * mi_heap_recalloc_aligned_at(mi_heap_t *heap, void *p, size_t newcount, size_t size, size_t alignment, size_t offset)

mi_recalloc

void * mi_recalloc(void *p, size_t count, size_t size)

Re-allocate memory to count elements of size bytes, with extra memory initialized to zero.

mi_heap_rezalloc_aligned_at

void * mi_heap_rezalloc_aligned_at(mi_heap_t *heap, void *p, size_t newsize, size_t alignment, size_t offset)

mi_recalloc_aligned

void * mi_recalloc_aligned(void *p, size_t newcount, size_t size, size_t alignment)

mi_rezalloc_aligned

void * mi_rezalloc_aligned(void *p, size_t newsize, size_t alignment)

mi_heap_rezalloc_aligned

void * mi_heap_rezalloc_aligned(mi_heap_t *heap, void *p, size_t newsize, size_t alignment)

mi_rezalloc_aligned_at

void * mi_rezalloc_aligned_at(void *p, size_t newsize, size_t alignment, size_t offset)

mi_heap_recalloc_aligned

void * mi_heap_recalloc_aligned(mi_heap_t *heap, void *p, size_t newcount, size_t size, size_t alignment)

mi_heap_rezalloc

void * mi_heap_rezalloc(mi_heap_t *heap, void *p, size_t newsize)

mi_recalloc_aligned_at

void * mi_recalloc_aligned_at(void *p, size_t newcount, size_t size, size_t alignment, size_t offset)

mi_heap_recalloc

void * mi_heap_recalloc(mi_heap_t *heap, void *p, size_t newcount, size_t size)

mi_rezalloc

void * mi_rezalloc(void *p, size_t newsize)

  • mimalloc-doc.h
  • Generated by 1.11.0