c++ статический нестатический

в С++, где остаются статические или нестатические переменные? Я имею в виду в памяти.

и Когда инициализируются статические или нестатические переменные?

Мне нужен кто-то, чтобы помочь мне прояснить мою мысль. Спасибо!

а как же С? такой же?


person Josh Morrison    schedule 14.03.2011    source источник
comment
Возможно, вы найдете здесь интересный материал: stackoverflow.com/questions/5162580/   -  person    schedule 14.03.2011


Ответы (3)


Они могут располагаться там, где компилятор (или компоновщик, или загрузчик) хочет поместить их в память, стандарты C и C++ не требуют такого уровня детализации. Они определяют только поведение.

Как правило, статические члены инициализируются один раз, либо при запуске программы (в том числе во время компиляции, так что они просто загружаются в уже инициализированном состоянии), либо непосредственно перед первым использованием.

person paxdiablo    schedule 14.03.2011
comment
Очень хорошо (и тщательно) сформулировано. - person Martin York; 14.03.2011

Место проживания нестатических членов зависит от того, как создается экземпляр объекта.

class foo
{
    int num ; // Non-Static member 
    // ....
};

foo obj ; // In this case `num` resides on stack. In fact, obj it self resides on stack
foo *temp = new foo;  // In this case `num` resides on heap or in memory location acquired from the free store.

Я не уверен насчет статических членов.

person Mahesh    schedule 14.03.2011

Статики находятся там же, где и глобальные переменные, которые, как правило, определяются компилятором, создаются при загрузке программы и сохраняются до завершения программы.

Нестатические объекты помещаются туда, куда вы их помещаете (в стек или в кучу).

person deek0146    schedule 14.03.2011