| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Общие вопросы > Выделение памяти |
| Автор: rukudias 17.5.2012, 04:00 | ||
| Привет Всем! Читая одну интересную книгу наткнулся на следующее определения
мож ктонить привести пример для двух послед способов и если первый способ интерпритирован мной не привильно то и для него тоже. Спасибо. |
| Автор: bems 17.5.2012, 04:39 |
вызвав malloca |
| Автор: bsa 17.5.2012, 15:31 |
| rukudias, к сожалению, я тоже слабо себе представляю, как можно с помощью обычного new выделить память в области стека текущего фрейма функции. А вот все остальное вполне возможно. Например, со стандартным контейнером (например, list) нет никаких проблем: делаешь статический объект std::list<std::vector<char> > и при каждом вызове new возвращаешь адрес данных нового вектора. |
| Автор: 500mhz 17.5.2012, 17:08 | ||
Там все просто, указатель стека сдвинули, вот вам и память выделили, обычно там все локальные переменные и структуры хранятся, соответственно после выхода из функции указатель стека на место возвращаеться и как бы все данные теряются (на самом деле не совсем так, пока они не перезаписаны то они есть). |
| Автор: volatile 17.5.2012, 23:39 | ||
Такие фокусы, только для сумасшедших. Достаточно одного прерывания в момент возврата, и вместо данных окажется полная хрень. |
| Автор: 500mhz 18.5.2012, 18:01 |
| Господа я же не говорю что данными в стеке после выхода нужно пользоваться. |
| Автор: math64 21.5.2012, 09:10 |
| Есть функция alloca(size) - она выделит память на стеке, которой можно пользоваться до выхода из функции, вызвавшей её. Но я не уверен, что её можно использовать в C++, если на стеке будут создаваться обычные объекты C++, имеющие конструктор и деструктор. |
| Автор: baldina 21.5.2012, 09:52 |
| почему нет, это же внутреннее дело operator new() http://codepad.org/vwor2opV http://liveworkspace.org/code/54212f595885ded2bb100ec85d05c660 |
| Автор: baldina 21.5.2012, 10:25 |
| это я глупость написал - alloca() внутри new(). после выхода из new стек очищается Добавлено через 11 минут и 59 секунд но обычным объектам alloca() не мешает http://codepad.org/dxPgNIFO |
| Автор: 500mhz 21.5.2012, 14:50 |
| GlobalAlloc рулит ))) |