| ▲ | speedstyle 5 hours ago | |
To your virtual memory comment, the kernel can only do as it's told, but allocators can indeed tell it to shuffle pages around in virtual memory. On Linux that's `mremap` [0], and `realloc` implementations [1] use it for large enough Vecs (apparently 128kiB for glibc and musl). macOS' libmalloc will try to map new pages that extend large allocations in-place, but memcpy elsewhere if existing virtual mappings are in the way. I don't think Windows' HeapReAlloc does either, but they might reserve a larger virtual region and incrementally commit it or something to similar effect. [0] https://man7.org/linux/man-pages/man2/mremap.2.html [1] https://git.musl-libc.org/cgit/musl/tree/src/malloc/mallocng... | ||