[Vm-dev] Re: [Pharo-project] is it possible to know the memory occupation (bytes) of an object?

Nicolas Cellier nicolas.cellier.aka.nice at gmail.com
Tue Sep 28 04:46:40 UTC 2010


2010/9/27 Eliot Miranda <eliot.miranda at gmail.com>:
>
>
>
> On Mon, Sep 27, 2010 at 12:20 PM, Mariano Martinez Peck <marianopeck at gmail.com> wrote:
>>
>>
>>
>>
>> On Wed, Sep 22, 2010 at 12:34 PM, Mariano Martinez Peck <marianopeck at gmail.com> wrote:
>>>
>>>
>>> On Wed, Sep 22, 2010 at 12:12 PM, Henrik Johansen <henrik.s.johansen at veloxit.no> wrote:
>>>>
>>>> On Sep 22, 2010, at 9:59 40AM, Adrian Lienhard wrote:
>>>>
>>>> > Some notes:
>>>> >
>>>> > - What should be answered for small ints? 1 sizeInMemory -->8. That's wrong. Shouldn't this answer 0?
>>>>
>>>> Philosophical question really, imo both 4 (Again, in 32bit images at least) and 0 would be "correct" answers in their own ways. 8 is definitely wrong though :)
>>>> The method comment should probably highlight which definition is used.
>>>>
>>
>>
>> So....what should we consider for SmallInteger ?   4 bytes or 0 bytes?
>
> 0 bytes, obviously.  The only space occupied by a SmallInteger is the space of the slot containing it.  There is no SmallInteger object beyond the slot.
>

Or from another POV, it's 4, the size of the slot. But we don't count
the size of the slots, they are already counted in the containing
object, that's why it should answer 0.

Nicolas

>>
>> I would like to compute the really used memory.
>>
>> thanks
>>
>> mariano
>>
>>>
>>> At the beginning I also thought to have 4, instead of 0. The problem is that if you put 4 and you have an object with and instVar that it is a SmallInteger, it will be counted twice, when actually it is only one.
>>> That's why I thoguht 0 was better, since I want the really occupated memory. On the other hand, if you do "4 sizeInMemory" and see zero, I have to admit it is a litlte confusing.
>>>
>>> The problem is that if I do for example:
>>>
>>> Class >> spaceForInstances
>>>     | totalSize |
>>>     totalSize := 0.
>>>     self allInstancesDo: [ :inst |
>>>         totalSize := totalSize + inst sizeInMemory.
>>>     ].
>>>     ^ totalSize
>>>
>>> SmallInteger spaceForInstances  ->>  0
>>>
>>> So I don't know...maybe we have to answer 4 instead of 0?
>>>
>>> Adrian what do you think?
>>>
>>>> >
>>>> > - In the line contentBytes := contentBytes + (self basicSize * bytesPerElement), why is contentBytes added because it should be always 0 because self class instSize should return 0 in case of variable classes. Or do I miss something?
>>>> You can have instance variables in variable classes:
>>>>
>>>> ArrayedCollection variableSubclass: #TallyArray
>>>>        instanceVariableNames: 'tally'
>>>>        classVariableNames: ''
>>>>        poolDictionaries: ''
>>>>        category: 'Collections-Arrayed'
>>>>
>>>> TallyArray instSize 1
>>>> (TallyArray new: 5) basicSize 5
>>>>
>>>> Sure, they're not used very often in Squeak/Pharo since become: is so slow, but there's no theoretical reason why you can't for example implement Set as a variable subclass with a tally inst var.
>>>>
>>>> >
>>>> > - Please remove the inline comment "inst vars"; if a comment is needed it should go into the main comment.
>>>> I agree, should be self-explanatory.
>>>>
>>>> Cheers,
>>>> Henry
>>>> _______________________________________________
>>>> Pharo-project mailing list
>>>> Pharo-project at lists.gforge.inria.fr
>>>> http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project
>>>
>>
>>
>
>
>


More information about the Vm-dev mailing list