On Tue, Apr 27, 2010 at 1:19 PM, Adrian Lienhard <a...@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 <a...@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
>
_______________________________________________
Pharo-project mailing list
Pharo-project@lists.gforge.inria.fr
http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project

Reply via email to