2011-03-14 3 views
1

в C++ где находятся статические или нестатические переменные? Я имею в виду в памяти.C++ static non-static

and, Когда инициализированы статические или нестатические переменные?

Нужна помощь, чтобы я поняла свою мысль. Спасибо!

а как насчет C? одна и та же?

+0

Возможно, вы найдете здесь интересный материал: http://stackoverflow.com/questions/5162580/what-happens-when-a-computer-program-runs – Muggen

ответ

11

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

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

+0

Очень хорошо (и тщательно) сформулировано. –

0

Место проживания нестационарных членов зависит от способа создания объекта.

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. 

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

0

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

Non-статика идти туда, где когда-либо вы их (на стеке или куче)