www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.learn - Do static variables in class consume memory of instances?

reply Mark Lagodych <lgd.mrk gmail.com> writes:
[D documentation](https://dlang.org/spec/attribute.html#static) 
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`?
Jul 22 2021
next sibling parent reply Adam D Ruppe <destructionator gmail.com> writes:
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
Jul 22 2021
parent Mark Lagodych <lgd.mrk gmail.com> writes:
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.
Jul 22 2021
prev sibling parent Mark Lagodych <lgd.mrk gmail.com> writes:
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: ```d 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.
Jul 22 2021