[squeak-dev] Re: [Vm-dev] Fwd: [Pharo-project] is it possible to
know the memory occupation (bytes) of an object?
Mariano Martinez Peck
marianopeck at gmail.com
Thu Apr 29 14:51:19 UTC 2010
Ok, the problem was that I was doing:
usedMemory := usedMemory + self internalByteSize: oop.
that didn't work and always answered me the same number.
Now, I had to do this:
usedMemory := usedMemory + (self internalByteSize: oop).
I don't understand why.
Thanks
Mariano
On Thu, Apr 29, 2010 at 3:22 PM, Mariano Martinez Peck <
marianopeck at gmail.com> wrote:
>
>
>
>> It's close but not entirely correct. The computation needs to include the
>> extra header word for "large" instances (> 255 bytes). Squeak has three
>> possible header sizes:
>>
>> 1 header word - used by compact classes
>> 2 header words - used by regular classes
>> 3 header words - used by "large" instances
>>
>> BTW, SpaceTally>>spaceForInstancesOf:withInstanceCount: has the correct
>> computation (except for 64 bit :-)
>>
>>
> Ok, perfect. Thanks :)
>
>
>
>>
>> Is there a way to know this
>>> but from the VM side also ? how ?
>>> I really need it from the VM side :( but I have no idea how to do it.
>>>
>>
>> It's easy to do in the VM, just use this:
>>
>> primitiveByteSize
>> "Answers the number of bytes the receiver occupies"
>>
>> | nbytes|
>> self export: true.
>> oop := self popStack.
>> nbytes := (self sizeBitsOf: oop) + (self extraHeaderBytes: oop).
>> self pushInteger: nbytes.
>>
>>
>
> I tried this and seems to work ok. I don't really need a primitive but an
> internal method that is called by a primitive. So, I did something like
> this:
>
> internalByteSize: anOop
>
> "Answers the number of bytes the receiver occupies"
> | nbytes|
> self inline: true.
> nbytes := (self sizeBitsOf: anOop) + (self extraHeaderBytes: anOop).
> ^ nbytes.
>
>
>
> and then I call it like this for example:
>
> oop := self firstAccessibleObject.
> [oop = nil] whileFalse: [
> (self isIntegerObject: oop)
> ifFalse: [
> size := self internalByteSize: oop.
> ......]
> oop := self accessibleObjectAfter: oop.
> ].
>
>
> but internalByteSize ALWAYS return me the same value...do you know what can
> be wrong ?
>
> Thanks in advance
>
> Mariano
>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20100429/764c2098/attachment.htm
More information about the Squeak-dev
mailing list
|