Thread overview
Do static variables in class consume memory of instances?
Jul 22, 2021
Mark Lagodych
Jul 22, 2021
Adam D Ruppe
Jul 22, 2021
Mark Lagodych
Jul 22, 2021
Mark Lagodych
July 22, 2021

D documentation says:

>

Static data has one instance per thread, not one per object.

Do static variables consume any memory in instances, perhaps just for pointers to the variables? Or does compiler automatically convert someObject.someStaticMember to SomeClass.someStaticMember?

July 22, 2021

On Thursday, 22 July 2021 at 15:50:59 UTC, Mark Lagodych wrote:

>

Do static variables consume any memory in instances, perhaps just for pointers to the variables?

nope

>

Or does compiler automatically convert someObject.someStaticMember to SomeClass.someStaticMember?

right

July 22, 2021

On Thursday, 22 July 2021 at 15:50:59 UTC, Mark Lagodych wrote:

>

Do static variables consume any memory in instances, perhaps just for pointers to the variables?

Figured it out.

Let's try:

import std.stdio;

class A {
    static int a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z;
}

void main() {
    writeln(__traits(classInstanceSize, A));
}

Prints: 16
Without static: 120
Difference: 104, exactly 26 * int.sizeof

So, the answer is NO, no memory is taken from instances.

July 22, 2021

On Thursday, 22 July 2021 at 16:05:41 UTC, Adam D Ruppe wrote:

>

On Thursday, 22 July 2021 at 15:50:59 UTC, Mark Lagodych wrote:

>

Do static variables consume any memory in instances, perhaps just for pointers to the variables?

nope

>

Or does compiler automatically convert someObject.someStaticMember to SomeClass.someStaticMember?

right

Thank you! Didn't see your reply.