Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Memory Allocation of Static Members in a Class

I posted a question recently: Initialization of Static Class members.

Now please check this code:

#include<iostream>
class A
{
    static int obj_s;
public: 
    A()
    {
        obj_s++;
        std::cout << A::obj_s << "\nObject(s) Created\n";
    }
};

int A::obj_s = 0;

int main()
{
}

Even though one has not created any object of Class A, making the member obj_s hold a value 0 - wouldn't it need memory since its getting defined?

like image 649
Sadique Avatar asked Mar 19 '11 03:03

Sadique


People also ask

What is static allocation of memory?

The static memory allocation is a fixed amount of memory that is allocated during the compile time of a program and the stack data structure. There are different types of memory architectures available in C language and memory is allocated in two areas, either in the stack memory area or the heap memory area.

How is memory allocated in a class?

There are two basic types of memory allocation: When you declare a variable or an instance of a structure or class. The memory for that object is allocated by the operating system. The name you declare for the object can then be used to access that block of memory.

Where the memory is allocated for static variables?

2) Static variables are allocated memory in data segment, not stack segment.

How memory is allocated for static members and non static members?

Static Variables A static variable in a class is unlike a member variable in that there is only one memory allocation for that value for the whole class. Regular, non-static variables in a class are allocated memory for each object declared of that class type; not so with statics.


1 Answers

Obviously, it takes memory. And int A::obj_s=0 is exactly what it does: it defines the variable along with it's memory. In fact, when we say we defined a variable X, that means we define a memory of sizeof(X), and that memory region we label as X.


More about static members:

A::obj_s is a static member of the class A. And static members exist without any instance. They're not part of instances of A.

§9.4.2/3 and 7 from the Standard,

once the static data member has been defined, it exists even if no objects of its class have been created.

Static data members are initialized and destroyed exactly like non-local objects (3.6.2, 3.6.3).

Read my complete answer here:

Do static members of a class occupy memory if no object of that class is created?

like image 131
Nawaz Avatar answered Oct 04 '22 03:10

Nawaz