On Tue, Apr 27, 2010 at 1:19 PM, Adrian Lienhard <adi@netstyle.ch> wrote:
Its a simple method in Object:

Object>>sizeInMemory
� � � �"Returns the number of bytes used by this object in memory (including its header)"

� � � �| headerSize instanceSize |
� � � �headerSize := (self class indexIfCompact > 0 ifTrue: [ 4 ] ifFalse: [ 8 ]).
� � � �instanceSize := (self class isVariable
� � � � � � � �ifFalse: [ self class instSize * Smalltalk wordSize ]
� � � � � � � �ifTrue: [ (self basicSize * (self class isBytes
� � � � � � � � � � � �ifTrue: [ 1 ] ifFalse: [ Smalltalk wordSize ])) ]).
� � � �^ headerSize + instanceSize


Hi Adrian. Sorry for returning to this thread. I am trying to contemplate all the cases.

I was looking at SpaceTally and I found that maybe a better implementation could be something like this:

Object >> sizeInMemory
��� "Answer the number of bytes consumed by this instance including object header."

��� | isCompact instVarBytes bytesPerElement headerBytes total contentBytes |
��� isCompact := self class indexIfCompact > 0.
��� instVarBytes := self class instSize * 4.
��� self class isVariable
��� ��� ifTrue: [
��� ��� ��� bytesPerElement := self class isBytes ifTrue: [1] ifFalse: [4].
��� ��� ��� total := 0.
��� ��� ��� contentBytes := instVarBytes + (self basicSize * bytesPerElement).
��� ��� ��� ��� headerBytes :=
��� ��� ��� ��� ��� contentBytes > 255
��� ��� ��� ��� ��� ��� ifTrue: [12]
��� ��� ��� ��� ��� ��� ifFalse: [isCompact ifTrue: [4] ifFalse: [8]].
��� ��� ��� ��� total :=� headerBytes + contentBytes.
��� ��� ��� ^ total]
��� ��� ifFalse: [
��� ��� ��� headerBytes :=
��� ��� ��� ��� instVarBytes > 255
��� ��� ��� ��� ��� ifTrue: [12]
��� ��� ��� ��� ��� ifFalse: [isCompact ifTrue: [4] ifFalse: [8]].
��� ��� ��� ^ headerBytes + instVarBytes ].



I guess I did some mistake but if we can arrive to a good implementation it would be really cool.

Thanks

mariano

Please also note the other mail I sent to this thread.

Adrian

On Apr 27, 2010, at 13:16 , Mariano Martinez Peck wrote:

> On Tue, Apr 27, 2010 at 12:45 PM, Adrian Lienhard <adi@netstyle.ch> wrote:
>
>> I once sent some code to the mailing list (search for thread named "Size of
>> objects").
>
>
> Thanks Adrian...I couldn't find it. Can you forward it to me please? �or
> just send me the code...
>
>
>> We should add this to the image. I think I named it #sizeInMemory.
>>
>>
> There are only changes to the image side ? �or the vm also ?
>
> Thanks
>
> Mariano
>
>
>
>> Adrian
>>
>> On Apr 27, 2010, at 12:03 , Mariano Martinez Peck wrote:
>>
>>> Hi. I don't know if "memory occupation" is the better name. I just want
>> to
>>> know the amount of memory that an object is occupying in RAM. I mean, the
>>> amount of bytes.
>>>
>>> Is this possible ? if true, how ? � I would like to do it from both
>> sides:
>>> image and VM.
>>>
>>> I checked both but I didn't find anything.
>>>
>>> Thanks in advance
>>>
>>> Mariano
>>> _______________________________________________
>>> Pharo-project mailing list
>>> Pharo-project@lists.gforge.inria.fr
>>> http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project
>>
>>
>> _______________________________________________
>> Pharo-project mailing list
>> Pharo-project@lists.gforge.inria.fr
>> http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project
>>
> _______________________________________________
> Pharo-project mailing list
> Pharo-project@lists.gforge.inria.fr
> http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project


_______________________________________________
Pharo-project mailing list
Pharo-project@lists.gforge.inria.fr
http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project