Q1. В Java все объекты, массивы и переменные класса хранятся в куче? Верно ли то же самое для C++? Является ли сегмент данных частью кучи?
Как насчет следующего кода на C++?
class MyClass{
private:
static int counter;
static int number;
};
MyClass::number = 100;
Q2. Насколько я понимаю, переменные, которым компилятор присвоил определенное значение, хранятся в сегменте данных, а неинициализированные глобальные и статические переменные хранятся в BSS (блок, запускаемый символом). В этом случае MyClass::counter, будучи статическим, инициализируется компилятором нулем, поэтому он сохраняется в BSS, а MyClass::number, который инициализируется значением 100, сохраняется в сегменте данных. Правильно ли я делаю вывод?
Q3. Рассмотрим следующий фрагмент кода:
void doHello(MyClass &localObj){
// 3.1 localObj is a reference parameter, where will this get stored in Heap or Stack?
// do something
}
void doHelloAgain(MyClass localObj){
// 3.2 localObj is a parameter, where will this get stored in Heap or Stack?
// do something
}
int main(){
MyClass *a = new MyClass(); // stored in heap
MyClass localObj;
// 3.3 Where is this stored in heap or stack?
doHello(localObj);
doHelloAgain(localObj);
}
Я надеюсь, что я ясно изложил свои вопросы для всех
ИЗМЕНИТЬ:
Пожалуйста, обратитесь к этой статье, чтобы получить некоторое представление о BSS.
EDIT1: имя класса изменено с MyInstance на MyClass, так как это было неудачное имя. Искренние извинения
EDIT2: номер переменной члена класса изменен с нестатического на статический.
new
, вы используете malloc, а это означает, что все, что вы создаете с помощьюnew
, действительно хранится в куче. Я понятия не имею, что вы подразумеваете под тем, что сегмент данных является частью кучи? - person Matt Ball   schedule 26.08.2009