File tree Expand file tree Collapse file tree 3 files changed +36
-5
lines changed
Expand file tree Collapse file tree 3 files changed +36
-5
lines changed Original file line number Diff line number Diff line change @@ -656,6 +656,30 @@ is not available but C's `malloc` is. You can use the `nimAllocPagesViaMalloc`
656656define to use `malloc ` instead of `mmap `. `nimAllocPagesViaMalloc ` is currently
657657only supported with `--gc:arc ` or `--gc:orc `. (Since version 1.6)
658658
659+ nimPage256 / nimPage512 / nimPage1k
660+ ===================================
661+
662+ Adjust the page size for Nim's GC allocator. This enables using
663+ `nimAllocPagesViaMalloc ` on devices with less RAM. The default
664+ page size requires too much RAM to work.
665+
666+ Recommended settings:
667+
668+ - < 32 kB of RAM use `nimPage256 `
669+
670+ - < 512 kB of RAM use `nimPage512 `
671+
672+ - < 2 MB of RAM use `nimPage1k `
673+
674+ Initial testing hasn't shown much difference between 512B or 1kB page sizes
675+ in terms of performance or latency. Using `nimPages256 ` will limit the
676+ total amount of allocatable RAM.
677+
678+ nimMemAlignTiny
679+ ===============
680+
681+ Sets `MemAlign ` to `4 ` bytes which reduces the memory alignment
682+ to better match some embedded devices.
659683
660684Nim for realtime systems
661685========================
Original file line number Diff line number Diff line change 1010# Page size of the system; in most cases 4096 bytes. For exotic OS or
1111# CPU this needs to be changed:
1212const
13- PageShift = when defined (cpu16): 8 else : 12 # \
14- # my tests showed no improvements for using larger page sizes.
13+ PageShift = when defined (nimPage256) or defined (cpu16): 8
14+ elif defined (nimPage512): 9
15+ elif defined (nimPage1k): 10
16+ else : 12 # \ # my tests showed no improvements for using larger page sizes.
17+
1518 PageSize = 1 shl PageShift
1619 PageMask = PageSize - 1
1720
1821
1922 MemAlign = # also minimal allocatable memory block
20- when defined (useMalloc):
23+ when defined (nimMemAlignTiny): 4
24+ elif defined (useMalloc):
2125 when defined (amd64): 16
2226 else : 8
2327 else : 16
Original file line number Diff line number Diff line change @@ -19,8 +19,11 @@ proc `+!!`(p: pointer, size: int): pointer {.inline.} =
1919 result = cast [pointer ](cast [int ](p) + size)
2020
2121const
22- PageShift = when defined (cpu16): 8 else : 12 # \
23- # my tests showed no improvements for using larger page sizes.
22+ PageShift = when defined (nimPage256) or defined (cpu16): 8
23+ elif defined (nimPage512): 9
24+ elif defined (nimPage1k): 10
25+ else : 12 # \ # my tests showed no improvements for using larger page sizes.
26+
2427 PageSize = 1 shl PageShift
2528
2629var p = osAllocPages (3 * PageSize )
You can’t perform that action at this time.
0 commit comments