diff options
author | 2022-12-28 00:51:22 -0800 | |
---|---|---|
committer | 2022-12-28 00:51:22 -0800 | |
commit | c0dd2841362b67fdb5ede262b19688004a4eb9a4 (patch) | |
tree | a3cd6b353c25c30d66489de61b394af7d5568fed /src/allocators/mimalloc.zig | |
parent | 504972fa5deb92f2d0510d42f11b085351915a32 (diff) | |
download | bun-c0dd2841362b67fdb5ede262b19688004a4eb9a4.tar.gz bun-c0dd2841362b67fdb5ede262b19688004a4eb9a4.tar.zst bun-c0dd2841362b67fdb5ede262b19688004a4eb9a4.zip |
Upgrade to latest Zig (#1610)
* @min and @max
* builtins and some trivial ones
* Most of them
* more
* more!
* More Progress
* wip
* Update tagged_pointer.zig
* Update http_client_async.zig
* Most of the iterable dir changes
* alright
* Remove usages of deprecated formatters
* :camera:
* fmt
* Update shimmer.zig
* wip
* wip
* wip
* progress
* more
* Latest
* stuck on error
* latest
* workaround stage2
* wip
* Update string_immutable.zig
* wip
* Migrate `Dirent` and `require("fs')` to use JSC<>Zig bindings
* Fix build errors
* Fixup most of the test failures
* Fix `make headers`
* Fix "outside package path" error
* Fixup aligned alloc
* Add missing file
* linux
* More linux fixes
* use latest peechy
* Fix transpiler test failure
* Forgot about these
* Fixup test failure
* Update node-timers.test.ts
* [node:htt] Fix `undefined is not an object` error
Fixes https://github.com/oven-sh/bun/issues/1618
* Update http.exports.js
* Make this test less flaky
* fix hashes
* Fix hex formatting and zls issues
* Download zig version
* Update Dockerfile
* Update Dockerfile
* Update uws
* Update Dockerfile
* Set llvm version
* Update README.md
* Update uws
* Update Dockerfile
* Update io_linux.zig
* Update bun.zig
* Log output
* workaround strange @cInclude error
* Make ffi tests better
* Don't use cImport
* Update c.zig
* Update c-bindings.cpp
* call setOutputDir
* Update Dockerfile
* Use a longer name
* latest
* Update serve.test.ts
Co-authored-by: Jarred Sumner <709451+Jarred-Sumner@users.noreply.github.com>
Co-authored-by: Veikka Tuominen <git@vexu.eu>
Diffstat (limited to 'src/allocators/mimalloc.zig')
-rw-r--r-- | src/allocators/mimalloc.zig | 18 |
1 files changed, 14 insertions, 4 deletions
diff --git a/src/allocators/mimalloc.zig b/src/allocators/mimalloc.zig index 5d8d7f2e3..fbefe6c95 100644 --- a/src/allocators/mimalloc.zig +++ b/src/allocators/mimalloc.zig @@ -14,11 +14,11 @@ pub extern fn mi_reallocn(p: ?*anyopaque, count: usize, size: usize) ?*anyopaque pub extern fn mi_reallocf(p: ?*anyopaque, newsize: usize) ?*anyopaque; pub extern fn mi_usable_size(p: ?*const anyopaque) usize; pub extern fn mi_good_size(size: usize) usize; -pub const mi_deferred_free_fun = fn (bool, c_ulonglong, ?*anyopaque) callconv(.C) void; +pub const mi_deferred_free_fun = *const fn (bool, c_ulonglong, ?*anyopaque) callconv(.C) void; pub extern fn mi_register_deferred_free(deferred_free: ?mi_deferred_free_fun, arg: ?*anyopaque) void; -pub const mi_output_fun = fn ([*:0]const u8, ?*anyopaque) callconv(.C) void; +pub const mi_output_fun = *const fn ([*:0]const u8, ?*anyopaque) callconv(.C) void; pub extern fn mi_register_output(out: ?mi_output_fun, arg: ?*anyopaque) void; -pub const mi_error_fun = fn (c_int, ?*anyopaque) callconv(.C) void; +pub const mi_error_fun = *const fn (c_int, ?*anyopaque) callconv(.C) void; pub extern fn mi_register_error(fun: ?mi_error_fun, arg: ?*anyopaque) void; pub extern fn mi_collect(force: bool) void; pub extern fn mi_version() c_int; @@ -118,7 +118,7 @@ pub const struct_mi_heap_area_s = extern struct { full_block_size: usize, }; pub const mi_heap_area_t = struct_mi_heap_area_s; -pub const mi_block_visit_fun = fn (?*const Heap, [*c]const mi_heap_area_t, ?*anyopaque, usize, ?*anyopaque) callconv(.C) bool; +pub const mi_block_visit_fun = *const fn (?*const Heap, [*c]const mi_heap_area_t, ?*anyopaque, usize, ?*anyopaque) callconv(.C) bool; pub extern fn mi_heap_visit_blocks(heap: ?*const Heap, visit_all_blocks: bool, visitor: ?mi_block_visit_fun, arg: ?*anyopaque) bool; pub extern fn mi_is_in_heap_region(p: ?*const anyopaque) bool; pub extern fn mi_is_redirected() bool; @@ -201,3 +201,13 @@ pub extern fn mi_new_reallocn(p: ?*anyopaque, newcount: usize, size: usize) ?*an pub const MI_SMALL_WSIZE_MAX = @as(c_int, 128); pub const MI_SMALL_SIZE_MAX = MI_SMALL_WSIZE_MAX * @import("std").zig.c_translation.sizeof(?*anyopaque); pub const MI_ALIGNMENT_MAX = (@as(c_int, 16) * @as(c_int, 1024)) * @as(c_ulong, 1024); + +const std = @import("std"); +pub fn canUseAlignedAlloc(len: usize, alignment: usize) bool { + return alignment > 0 and std.math.isPowerOfTwo(alignment) and !mi_malloc_satisfies_alignment(alignment, len); +} +const MI_MAX_ALIGN_SIZE = 16; +inline fn mi_malloc_satisfies_alignment(alignment: usize, size: usize) bool { + return (alignment == @sizeOf(*anyopaque) or + (alignment == MI_MAX_ALIGN_SIZE and size >= (MI_MAX_ALIGN_SIZE / 2))); +} |