From: "Stefan Monnier" <monnier+gnu/emacs@rum.cs.yale.edu>
Subject: malloc and alignment
Date: Mon, 16 Jun 2003 10:38:50 -0400 [thread overview]
Message-ID: <200306161438.h5GEcodM011551@rum.cs.yale.edu> (raw)
I'd like to try and get rid of the markbit on Lisp_Object values.
The idea is to scrape off a few more bits (I'd like to bump
maxint to 512MB instead of 128MB). And I'd also like to represent
floats in 8bytes rather than 12.
So the idea is to use a separate bitmap, but in order to quickly
find the markbit corresponding to an object, we need to be able
to quickly find the bitmap for an arbitrary pointer.
The typical solution for this is to allocate things in chunks of
<power-of-2 here> such that you can get the base of the bitmap
by doing `ptrvalue & bitmask'.
But for this, I need to make sure things are properly aligned.
Currently alloc.c calls malloc to allocate blocks of about 8KB
which are then split into 1000 cons cells or floats or whatever.
So all we need is to make sure that those 8KB are properly aligned.
But how can I do that ?
It seems the only reliable way is to malloc 16KB and then waste
the 8KB that happen to be before/after the aligned part.
Should I just wrap malloc in my own malloc_aligned such that
malloc_aligned calls malloc to allocate chunks of say 1MB
and then gives them out in aligned packets of 8KB ?
Has anybody played with things like that and could share his/her
experience ?
Stefan
PS: Of course, an alternative is to split my 8KB blocks into aligned
subblocks of 256B: 31 cons cells (or floats) plus one 32bit integer
for the bitmask. This makes the bitmask access a tiny bit simpler
since the bitmap is made of a single integer rather than an array
of ints. On another hand, it will waste a lot of cache space
unless your cache lines are 256B long.
next reply other threads:[~2003-06-16 14:38 UTC|newest]
Thread overview: 15+ messages / expand[flat|nested] mbox.gz Atom feed top
2003-06-16 14:38 Stefan Monnier [this message]
2003-06-16 15:15 ` malloc and alignment David Kastrup
2003-06-16 15:39 ` Stefan Monnier
2003-06-16 15:59 ` Stefan Monnier
2003-06-17 4:57 ` Stephen J. Turnbull
2003-06-17 7:35 ` David Kastrup
2003-06-16 22:35 ` Miles Bader
2003-06-16 23:11 ` Stefan Monnier
2003-06-17 2:25 ` Miles Bader
2003-06-17 4:48 ` Stephen J. Turnbull
[not found] ` <E19SJCe-0008Bb-Vp@fencepost.gnu.org>
2003-06-24 22:52 ` Stefan Monnier
[not found] ` <E19VGK5-0000CQ-F4@fencepost.gnu.org>
2003-06-27 23:17 ` Stefan Monnier
2003-06-27 23:47 ` Miles Bader
2003-06-29 2:30 ` Richard Stallman
2003-07-04 20:42 ` Stefan Monnier
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
List information: https://www.gnu.org/software/emacs/
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=200306161438.h5GEcodM011551@rum.cs.yale.edu \
--to=monnier+gnu/emacs@rum.cs.yale.edu \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this public inbox
https://git.savannah.gnu.org/cgit/emacs.git
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).