size of a class instance
Lionello Lunesu
lio at lunesu.remove.com
Thu Nov 16 08:56:03 PST 2006
Bill Baxter wrote:
> Lionello Lunesu wrote:
>> Sean Kelly wrote:
>>> Bill Baxter wrote:
>>>> Is this really the best way to get the size of a class instance
>>>> given the type?
>>>>
>>>> MyClass.classinfo.init.length;
>>>
>>> Yes. And this only works at run time. I proposed a new .isizeof
>>> property to simplify things, but it didn't seem terribly popular. See:
>>>
>>> http://d.puremagic.com/issues/show_bug.cgi?id=88
>>>
>>>
>>> Sean
>>
>> I suppose sizeof(MyClass) could simply return the right value. I don't
>> see how the size of a class' handle can be useful.
>>
>> L.
>
> I suspect the reason is that for doing various low-level things you
> might actually need to know how much space the thing is occupying on the
> stack. Like a varargs, for instance. You need to know how big the
> thing is on the stack to advance the _argptr properly. It doesn't
> matter how big the instance data on the heap is.
>
> I just now did a web search to see what other GC languages that hide
> pointers from you do.
>
> Java just doesn't have sizeof apparently.
>
> C# has it. From the spec:
> "For all other (non predefined types), the result of the sizeof
> operator is implementation-defined and is classified as a value, not a
> constant.
> ...
> When applied to an operand that has struct type, the result is the total
> number of bytes in a variable of that type, including any padding."
>
> So basically it sounds like they say you can't count on sizeof(aclass)
> returning anything in particular.
>
> I guess when it comes down to it, finding the size of a class is really
> only useful for satisfying one's curiosity and optimizing member orders
> to get better alignment. And for that purpose I guess it doesn't really
> have to be that intuitive a name.
>
> --bb
Uh, according to the D spec, the order of the members of a _class_ may
be changed by the compiler, so optimizing manually would have no effect.
L.
More information about the Digitalmars-d-learn
mailing list