[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: RFC: Non-fragile ivars
From: |
David Chisnall |
Subject: |
Re: RFC: Non-fragile ivars |
Date: |
Tue, 3 Jun 2008 12:55:28 +0100 |
On 3 Jun 2008, at 09:11, Fred Kiefer wrote:
I like this whole idea a lot, but we will need a bit more
performance testing to make sure we understand the consequences.
What I did not quite get is where are we going to store the size of
the different classes? Perhaps a more detailed outline of the
algorithm would help here.
Fred
Each class has an instance_size parameter. This is filled in by the
compiler, which creates the class statically in the data segment. It
also has an array of structures containing the offsets of each
instance variable from the self pointer. My proposal is that the
compiler should be modified so that:
For all classes which are not base classes, instance_size is set to 0
- the size of the instance variables added for this class.
The addresses of all instance variables in the metadata structure are
then set to the offset from the start of the new class. i.e. the
first instance variable declared for any class will have offset 0,
irrespective of the size of the superclass.
The runtime will then be modified so that, on loading a class, it
checks whether instance_size <= 0 (instance size is currently >=
sizeof(id), since it always contains at least the isa pointer). If
so, then it will set instance_size to super_class->instance_size -
instance_size (don't forget, instance_size is negative for classes
supporting non-fragile ivars). It will then add super_class-
>instance_size to the offset in every ivar.
The module load function will then introspect the runtime to get the
offset of each instance variable in the class and store it in a name-
mangled global. I'd like to be able to get it directly from the
metadata structure, but I don't think this is possible (although with
link-time optimisation it might be).
Anyway, I will try implementing this in the fork of the GNU runtime we
have in the Étoilé repository, and if it seems useful send the patches
upstream. I had a chat with Andrew Pinski a while ago, and he's
(provisionally) willing to accept patches for this but doesn't have
the time to do it himself.
David
- Re: RFC: Non-fragile ivars, Richard Frith-Macdonald, 2008/06/01
- Re: RFC: Non-fragile ivars, Saso Kiselkov, 2008/06/01
- Re: RFC: Non-fragile ivars, Fred Kiefer, 2008/06/03
- Re: RFC: Non-fragile ivars, Saso Kiselkov, 2008/06/03
- Re: RFC: Non-fragile ivars,
David Chisnall <=
- Re: RFC: Non-fragile ivars, Saso Kiselkov, 2008/06/03
- Message not available
- Re: RFC: Non-fragile ivars, Michael Ash, 2008/06/04
- Re: RFC: Non-fragile ivars, address@hidden, 2008/06/03
- Re: RFC: Non-fragile ivars, Saso Kiselkov, 2008/06/03
- Re: RFC: Non-fragile ivars, Graham J Lee, 2008/06/03
- Re: RFC: Non-fragile ivars, Michael Ash, 2008/06/04
- Re: RFC: Non-fragile ivars, David Chisnall, 2008/06/05