95 points egberts1 1 day ago 27 comments
Nnnes 6 hours ago | parent
Funny SSL setup. Explanation from here https://news.ycombinator.com/item?id=49133598
> Oh, certain browser will not work with this blog if it cannot negotiate ONLY for Cha-Cha/Poly. It's by design as a showcase of why that particular web browser refuses to do that.
I assume the "particular web browser" is Chromium, which won't load it on any OS I've tried. On Windows, Firefox and the built-in curl.exe also refuse to connect.
bom-d-van 5 hours ago | parent
ncruces 4 hours ago | parent
Article makes it look like nothing happened in the embed/low-memory/single-threaded malloc space in decades since Doug Lea's malloc.
I just implemented TLSF for my minimal Wasm libc: fragmentation is just as good, performance is a lot more consistent (and on average better), for a significant reduction in code size.
http://www.gii.upv.es/tlsf/index.html
https://github.com/ncruces/wasm2go/blob/main/libc-gen/c/mall...
egberts1 2 hours ago | parent
I do do have a malloc() benchmark but it is in bad shape and directories have not coalesce nicely yet, tor a single run or a menu-driven one.
egberts1 1 hour ago | parent
Certain browsers will suffer. Meh.
quietbritishjim 29 minutes ago | parent
ligarota 5 hours ago | parent
eqvinox 4 hours ago | parent
entrope 3 hours ago | parent
egberts1 2 hours ago | parent
egberts1 2 hours ago | parent
Someone 4 hours ago | parent
FTA: “When multiple threads simultaneously allocate or deallocate memory from the allocator, the allocator will serialize them. Programs making intensive use of the allocator actually slow down as the number of processors increases.”
The article does later retract on that, but that’s no reason to lead with such a blatantly false (with current allocators) statement.
Also FTA “In 2006, a third pool was introduced (after operating system memory pool and library-based memory pool) called the “arena”. Arena is a jemalloc-term”
Jemalloc is from around 2005 (http://jemalloc.net/), the idea of arenas is from the 1960s, and Wikipedia claims the term was coined in 1990 (https://en.wikipedia.org/wiki/Region-based_memory_management...), and the linked paper (https://www.cs.princeton.edu/techreports/1988/191.pdf) is from 1988.
Then, a typo: “as well as memory tied to specific to each of the multiple CPU core or even CPU infinity.”
“Infinity” should be “affinity” there.
eqvinox 4 hours ago | parent
egberts1 2 hours ago | parent
I got tired of reading AI prose so I compiled and wrote it from my collections of others' whitepapers.
As a "For Reference Only", at the very least, for me.
As usual, anyone is welcome to improve upon it under CC BY-NC-SA.
skavi 2 hours ago | parent
allocators are so simple to just swap into your program. if you can put together a few representative workloads, you should just try out a few allocators and profile whatever metrics you care about.
imp0cat 1 hour ago | parent
egberts1 1 hour ago | parent
skavi 11 minutes ago | parent
for us, tc was among the fastest in runtime while being very space efficient [0]. large rust application using far too many threads.
we’ve since also had great success with tc’s built in profiling tools.
zX41ZdbW 1 hour ago | parent
egberts1 2 hours ago | parent
Compilations are hard to get 100% right.
adrian_b 35 minutes ago | parent
> "The first memory allocation scheme started with a stack-based memory allocation. Next came the dynamic-based memory allocation scheme where linked-list and bucket-heap mechanism are used to divide the private-heap using size class approach. Soon, garbage collection algorithm introduced the initial backend of the memory allocation scheme."
Since no specific operating system is mentioned, these sentences appear to refer to the general history of dynamic memory allocation, in which case they are wrong.
"malloc" is a late comer in this history. It has appeared as the statement "ALLOCATE", together with the statement "FREE", in the programming language PL/I of IBM, by the end of 1964. The C programming language has inherited these 2 functions from IBM PL/I, together with several other features.
At that time (1964-12), many other techniques of managing memory had already been used for a few years.
Dynamic allocation of memory has started during the fifties, with allocation without ever freeing the allocated memory before the termination of the process.
Then, in 1960, 3 methods of handling dynamic memory allocation and implicit freeing were published, which have remained important until today: the use of garbage collectors in April (John McCarthy), the use of stacks in May (E. W. Dijkstra), and the use of reference counts in December (George E. Collins @ IBM).
So the use of garbage collectors is actually the oldest published method for handling dynamic memory allocation, not a newer method, being used in LISP I about 5 years before the first release of PL/I with explicit allocation and freeing (mid 1965).
AnimalMuppet 55 minutes ago | parent
While he was at the university, they were experimenting with different kind of mallocs. One was called the "buddy" malloc. It kept a list of free blocks of various sizes, and when you asked for a block and it didn't have one, it asked the OS for twice as much as you asked for. From the rest, it made another block (identical to yours, called the "buddy" block), and put it on the free list of that size.
Well, they experimented with a similar algorithm, but the idea was that most requests were small. So it took the buddy block and broke it into smaller pieces, one half the size of the request, one a quarter the size, and so on, and put those on their respective free lists. They called this the "donner" malloc, because you carved up your buddy.
From the way my coworker smiled, I think he thought it was amusing, but I don't think he was making it up.
egberts1 26 minutes ago | parent