Распределение объектов в стеке - PullRequest
0 голосов
/ 26 июня 2010

Что это значит, когда он говорит «встроенное размещение объектов в стеке»?

Особенно «встроенный» бит

Ответы [ 2 ]

3 голосов
/ 26 июня 2010

Это означает, что все данные для объекта размещены в стеке и будут удалены, когда текущий метод завершится.

Альтернатива (которая встречается в C # и Java или если вы используете указатель в C ++) - иметь ссылку или указатель на стек, который ссылается на данные объекта, которые размещены в куче. *

Я думаю, что «inline» здесь просто означает «как часть стекового фрейма для этого метода», а не как существующее отдельно от метода.

2 голосов
/ 26 июня 2010

Ну, вы знаете, что такое стек, верно?Если вы объявляете функцию, скажем, в C:

int foo() {
    int bar = 42;
    return bar;
}

Когда функция вызывается, создается некоторое пространство для информации о функции в стеке, и там также выделяется целое число bar,Когда функция возвращается, все в этом фрейме стека освобождается.

Теперь в C ++:

class A {
    int a;
    int b;
    A(int x, int y) {
       a = x;
       b = y;
    }
    ~A() {  // destructor
       cout << "A(" << a << "," << b << ") being deleted!" << endl;
    }
}

void foo() {
    A on_the_stack(1,2);
    A *on_the_heap = new A(3,4);        
}

В таких языках, как Java, все объекты размещаются в куче (если компиляторкакая-то оптимизация).Но в некоторых языках, таких как C ++, объекты класса могут идти прямо в стек, как int s или float s.Память из кучи не используется, если вы явно не вызовете new.Обратите внимание, что наш on_the_heap объект никогда не освобождается (вызывая для него delete), поэтому он вызывает утечку памяти.С другой стороны, объект on_the_stack автоматически освобождается, когда функция возвращается, и перед этим вызывается деструктор.

...