Информация об изменениях

Сообщение Re[2]: GCC и большой исходник от 31.08.2015 23:27

Изменено 31.08.2015 23:29 koenjihyakkei

Здравствуйте, Kernighan, Вы писали:

K>Чё-то слишком много он у тебя памяти жрёт. На первый взгляд там у тебя какая-то засада. Например файл сам себя инклюдит.


Сам себя не инклюдит, в первом сообщении дописал. Единственное на что сейчас грешу, это то что для каждого кейса создается по одному-два локального экземпляра другого класса, возможно локальный стек все и сжирает..
Вот код поподробнее
};
class Item {
    // ...
    Item& add1() { ... return *this; }
    Item& add2() { ... return *this; }
}

class Test {
    Item create() {
    // ...
    return *m_item;
    }
}

// используется примерно так
test.create(..).add1().add1().add2(); // произвольное количество вызовов функций
// и так далее более 47842 раз
test.create(..).add1().add1().add2();


По идее компилятор должен понять, что не надо под каждый такой Item выделять место в стеке, но такое ощущение, что именно это он и делает.
Re[2]: GCC и большой исходник
Здравствуйте, Kernighan, Вы писали:

K>Чё-то слишком много он у тебя памяти жрёт. На первый взгляд там у тебя какая-то засада. Например файл сам себя инклюдит.


Сам себя не инклюдит, в первом сообщении дописал. Единственное на что сейчас грешу, это то что для каждого кейса создается по одному-два локального экземпляра другого класса, возможно локальный стек все и сжирает..
Вот код поподробнее
};
class Item {
    // ...
    Item& add1() { ... return *this; }
    Item& add2() { ... return *this; }
}

class Test {
    Item create() {
    // ...
    return *m_item;
    }
}

// используется примерно так
test.create().add1().add1().add2(); // произвольное количество вызовов функций
// и так далее более 47842 раз
test.create().add1().add1().add2();


По идее компилятор должен понять, что не надо под каждый такой Item выделять место в стеке, но такое ощущение, что именно это он и делает.