On Wednesday, 24 January 2018 at 22:27:40 UTC, Nordlöw wrote:
On Wednesday, 24 January 2018 at 21:47:26 UTC, H. S. Teoh wrote:
On Wed, Jan 24, 2018 at 09:48:21PM +0000, Nordlöw via Digitalmars-d-learn wrote:
Why is the memory overhead for a class instance as high as 3 words (24 bytes on 64-bit systems? I find that annoyingly much for my knowledge database application.
[...]

There's been an attempt to get rid of the Monitor field, which takes up one word, but it didn't seem to have gone anywhere the last time it was discussed. I believe originally it was always initialized, but lately it seems to have been changed to be lazily initialized, so at least you'll only incur the computational cost if you actually use it. Nevertheless, the field itself is still there.


T

Can I use `*(cast(size_t*)&c.__monitor)` for storing my own stuff in a class instance `c` if I never use monitors? :)

Maybe, the runtime when destroying that class might think the monitor is set and try and destroy the mutex it thinks is where the pointer points to.

BTW: the documentation on the concept of monitors is kind of sparse here

https://dlang.org/spec/class.html#class_properties

What is the `__monitor` property used for? Something with synchronized member functions?

It is used for
```
MyClass mc;
synchronized(mc) // <-
{
    ...
}
```
and I believe synchronized member functions and member functions of `synchronized class` (which are the same thing really).

The __monitor field points to a mutex object which is managed by the runtime.

Reply via email to