Currently we have only 16 and 32 byte size classes.
24-byte size class would reduce memory consumption by 25% for programs that extensively
use 24-byte objects (e.g. Node struct { left, right *Node; data int }).
Leaving aside other issues with vector instructions (16-byte alignment is not enforced
for stack, AVX 32-byte alignment is not enforced at all); 24-byte objects are hardly
used with SSE as they contains only one and a half of vector elements.
Here is a prototype CL:
https://golang.org/cl/128090043/
On 64-bits it reduces heap size by 6%, on 32-bits - by 12% on garbage benchmark.
Currently we have only 16 and 32 byte size classes. 24-byte size class would reduce memory consumption by 25% for programs that extensively use 24-byte objects (e.g. Node struct { left, right *Node; data int }). Leaving aside other issues with vector instructions (16-byte alignment is not enforced for stack, AVX 32-byte alignment is not enforced at all); 24-byte objects are hardly used with SSE as they contains only one and a half of vector elements. Here is a prototype CL: https://golang.org/cl/128090043/ On 64-bits it reduces heap size by 6%, on 32-bits - by 12% on garbage benchmark.