summary refs log tree commit diff stats
path: root/lib/system/alloc.nim
Commit message (Collapse)AuthorAgeFilesLines
* Allocator: Always place free cells into the active chunk and add ↵SirOlaf2024-07-221-21/+96
| | | | | | | | | | | | | | documentation (#23871) Lets single threaded applications benefit from tracking foreign cells as well. After this, `SmallChunk` technically doesn't need to act as a linked list anymore I think, gotta investigate that more though. The likelihood of overflowing `chunk.free` also rises, so to work around that it might make sense to check `foreignCells` instead of adjusting free space or replace free with a counter for the local capacity. For Nim compile I can observe a ~10mb reduction, and smaller ones for other projects.
* Allocator: Track number of foreign cells a small chunk has access to (#23856)SirOlaf2024-07-201-29/+46
| | | | | | | | | Ref: https://github.com/nim-lang/Nim/issues/23788 There was a small leak in the above issue even after fixing the segfault. The sizes of `free` and `acc` were changed to 32bit because adding the `foreignCells` field will drastically increase the memory usage for programs that hold onto memory for a long time if they stay as 64bit.
* Adjust the correct chunk's free space in allocator (#23795)SirOlaf2024-07-081-2/+2
| | | Fixes #23788
* fixes #23725; Size computations work better when they are correct (#23758)Andreas Rumpf2024-06-261-6/+10
| | | [backport]
* fixes #22510 (#23100)Andreas Rumpf2024-06-061-27/+24
|
* make `-d:debugHeapLinks` compile again (#23126)ringabout2023-12-241-4/+6
| | | | | I have made `realloc` absorb unused adjacent memory, which improves the performance. I'm investigating whether `deallocOsPages` can be used to improve memory comsumption.
* uint arithmetic for pointers (#22159)Jacek Sieka2023-06-271-1/+1
| | | | | | | pointers are not signed and arithmetic may correctly cross int.max threshold this PR only fixes 2 occurances - there are plenty however in the std lib
* Add check for nimMaxJeap on occupied memory + allocation size (#21521)Regis Caillaud2023-03-201-11/+20
| | | | | | | | | | | * fix nimMAxHeap checks * move check to alloc pages * remove debug trace * Fix bad indentation How the hell did that pass through CI ?
* remove legacy code (#21134)ringabout2022-12-261-8/+2
| | | | | * remove legacy code * fixes
* fix #12122 (#21096)Bung2022-12-161-35/+35
|
* fixes #21062 (#21068)Andreas Rumpf2022-12-101-2/+3
|
* tyInt tyUint fit target int bit width (#20829)Bung2022-12-011-5/+5
|
* alloc uses atomic operations only when necessary (#20899)ringabout2022-11-231-5/+17
|
* move `system/atomics` out of system; `std/atomics` should be preferred (#20875)ringabout2022-11-221-0/+1
| | | | | | | | | | | | | * move `system/atomics` out of system; `std/atomics` should be preferred * add deprecation message * fixes * fixes * fixes * fixes more tests
* fixes a severe bug of testament (#20832)ringabout2022-11-171-0/+1
| | | | | | | | | | | | | | | | | | | * test azure * use exit 1 * try again * use useSysAssert * disable i386 * use refc for tlsEmulation on i386 * use refc * disable i386 Co-authored-by: Clay Sweetser <Varriount@users.noreply.github.com>
* move threads out of system (#20674)ringabout2022-10-291-0/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | * move syslocks first * progress * clean up * go on * clean up * clean up * add imports syslocks * remove documentation * public deallocOsPages * fixes genode * fixes more * fixes boehmGC * cover more cases * fixes cyclic deps * fixes genode * cleanup * unpublic fields * cleanup * clean up
* threaded alloc (#20492)Andreas Rumpf2022-10-091-106/+225
| | | | | | | | * allocator: catch up with multi-threading techniques * removed the global thread lock * more atomics for fun and profit * added important sysAssert * stats remain thread local and don't have to be atomic * undo split chunk optimizations in the hope it makes the CI happy
* allocator: disable unnecessary stuff for ORC [backport] (#20489)Andreas Rumpf2022-10-031-95/+44
|
* Freeing critical sections via atexit in system/alloc and system/io (#19062)Tail Wag Games2021-10-291-0/+3
| | | | | | | | | | | | | | | * adding new system module sysexitprocs and including system exit procedures when registering exit handlers defined in userland * fixing failing tests and adding initialization guard to handle cases where the module's global init logic isn't invoked first as is the case with some gc implementaions * js backend shouldn't try to invoke actual system exit procs * fixing formatting in sysexitprocs.nim * 256 was too much - my max number of plugins in my engine is 64 and I require two hooks per runtime it looks like with tls emulation turned off, so for my purposes 128 should be sufficient * so atExit should be enough here, can get rid of all the extra cruft I had added on top since I didn't realize atExit already provided a stack * done being cute - since newruntime prevents correct cpp codegen for object variants apparently and breaks tests if I try to use std/exitprocs, ddSysExitProc is just going into both modules. Since system doesn't include system/io, polluting system with it doesn't make sense either... at least it is only importc'd when it is required in either module and we don't have to have any weird when defined(nimOwnedEnabled) with a comment explaining why
* fixes #18494 (#18783)Andreas Rumpf2021-09-021-8/+34
|
* added `nimAllocPagesViaMalloc` switch (#18490)Andreas Rumpf2021-07-151-1/+2
| | | | | * added switch * alloc.nim needs page aligned memory blocks
* minor cleanups (#17948)Andreas Rumpf2021-05-061-1/+1
|
* fixes #16214 [backport] (#16252)Andreas Rumpf2020-12-041-4/+4
|
* init checks and 'out' parameters (#14521)Andreas Rumpf2020-06-231-1/+2
| | | | | | | | | | | * I don't care about observable stores * enforce explicit initializations * cleaner code for the stdlib * stdlib: use explicit initializations * make tests green * algorithm.nim: set result explicitly * remove out parameters and bring the PR into a mergable state * updated the changelog
* forward type alignment information to seqs (#12430)Arne Döring2020-04-191-7/+10
|
* TlSF Alloctor: use less memory for --gc:arc (#13280)Andreas Rumpf2020-01-281-79/+100
|
* Removed lib/system/allocators.nim. seqs_v2 and strs_v2 now uses ↵Ico Doornekamp2020-01-231-13/+31
| | | | | | | | | | | | | | | | | | | | | | | | | allocShared0. (#13190) * Cleanup, remove lib/system/allocators.nim. seqs_v2 and strs_v2 now use allocShared0 by default. * Fixed -d:useMalloc allocShared / reallocShared / deallocShared. These now use the alloc/dealloc/realloc implementation that also takes care of zeroing memory at realloc. * Removed debug printfs * Removed unpairedEnvAllocs() from tests/destructor/tnewruntime_misc * More mmdisp cleanups. The shared allocators do not need to zero memory or throw since the regular ones already do that * Introduced realloc0 and reallocShared0, these procs are now used by strs_v2 and seqs_v2. This also allowed the -d:useMalloc allocator to drop the extra header with allocation length. * Moved strs_v2/seqs_v2 'allocated' flag into 'cap' field * Added 'getAllocStats()' to get low level alloc/dealloc counters. Enable with -d:allocStats * *allocShared implementations for boehm and go allocators now depend on the proper *allocImpl procs
* more fixes for --cpu:avr [backport] (#12748)Andreas Rumpf2019-11-271-2/+2
|
* new gensym handling (#11985)Andreas Rumpf2019-08-231-6/+6
| | | | | | | | | | | * new .gensym implementation * make astspec test green again * introduce a --useVersion switch to group compatibility switches * fixes #10180 * fixes #11494 * fixes #11483 * object constructor fields and named parameters are also not gensym'ed * disabled broken package
* styleCheck: make the compiler and large parts of the stdlib compatible with ↵Araq2019-07-101-2/+2
| | | | --styleCheck:error
* Remove immediate pragma (#11308)Arne Döring2019-05-291-2/+1
| | | | | * remove immediate from tests * remove immediate from the compiler
* right shift is now by default sign preserving (#11322)Arne Döring2019-05-291-4/+4
| | | | | | | | | | | * right shift is now by default sign preserving * fix hashString and semfold * enable arithmetic shift right globally for CI * fix typo * remove xxx * use oldShiftRight as flag * apply feedback * add changelog entry
* --newruntime: progressAndreas Rumpf2019-03-141-4/+0
|
* allocators: introduce --define:nimMinHeapPages for tuning mmap calls (omg ↵Andreas Rumpf2019-01-191-3/+3
| | | | they are slow on OSX...)
* Try to let memTracker compile (#8502)Christopher Dunn2018-08-051-5/+5
|
* fixed #7894 (#8496)jcosborn2018-08-011-1/+2
| | | make system tests run properly
* Implements alloc/dealloc counters for better leak debugging. (#8384)Dominik Picheta2018-07-211-0/+13
|
* Don't depend on string.h in codegen (#8299)Yuriy Glukhov2018-07-131-2/+2
|
* fix allocator corruption for large sizes (#7338)jcosborn2018-03-171-36/+45
| | | | | | * fix allocator corruption for large sizes * allow large chunks to coalesce and added test case * use correct constants in MaxBigChunkSize
* make the allocator take a special path for allocations bigger than 2GB; ↵Araq2018-02-271-2/+26
| | | | fixes #7120
* fixes the tracking of 'occupied memory'Andreas Rumpf2018-01-301-6/+96
|
* alloc.nim: Make 'logAlloc' produce a toy Nim program for easier memory tracingAndreas Rumpf2018-01-181-2/+2
|
* GC improvements; distinguish between thread local and globals in the marking ↵Araq2018-01-141-4/+4
| | | | step
* allocator: minor fix for deallocOsPagesAndreas Rumpf2017-12-111-0/+1
|
* make the new allocator workAraq2017-12-071-8/+15
|
* make allocator use the TLSF algorithm; work in progressAraq2017-12-071-30/+127
|
* fixes #3558Araq2017-10-161-7/+8
|
* fixes withRegion for --gc:stackAndreas Rumpf2017-06-191-1/+0
|
* memory manager: use less memory; corruption preventionAndreas Rumpf2017-04-021-59/+47
|
* Fixes #4719. (#5585)Eugene Kabanov2017-03-231-0/+3
|