|
Динамические переменные и массивы, Можно ли задать динамические массивы ? |
|
|
|
 |
Ответов
|
Sep 2 2013, 07:55
|

неотягощённый злом
     
Группа: Свой
Сообщений: 2 746
Регистрация: 31-01-08
Из: Санкт-Петербург
Пользователь №: 34 643

|
Цитата(Navovvol @ Sep 2 2013, 11:51)  Буду краток. Работают ли операторы "new" и "delete" ? Есть ли их аналоги ? Проект делается на Си. Нет в си нет "new" и "delete", зато есть malloc и free. + ещё есть такая возможность.
--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
|
|
|
|
|
Sep 11 2013, 17:04
|
Профессионал
    
Группа: Свой
Сообщений: 1 351
Регистрация: 21-05-10
Пользователь №: 57 439

|
Цитата(demiurg_spb @ Sep 2 2013, 11:55)  + ещё есть такая возможность. Для маленьких микропроцессоров не лучший способ создавать большие массивы в стеке. Мне и для больших это не нравится. Лучше malloc() in heep.
Сообщение отредактировал Tarbal - Sep 11 2013, 17:04
|
|
|
|
|
Sep 12 2013, 06:42
|

неотягощённый злом
     
Группа: Свой
Сообщений: 2 746
Регистрация: 31-01-08
Из: Санкт-Петербург
Пользователь №: 34 643

|
Цитата(Tarbal @ Sep 11 2013, 21:04)  Для маленьких микропроцессоров не лучший способ создавать большие массивы в стеке. Мне и для больших это не нравится. Лучше malloc() in heep. Ничем не лучше. Если компилятор умеет хорошо это делать, почему бы и нет? Например iar-avr это делает отлично, а avr-gcc плохо. Создание динамического массива любого размера фактически не несёт никаких накладных расходов (кроме пары коррекций вершины стека, что в iar выливается в 2 асм-инструкции или в ноль инструкций, если и так в процедуре выделялось место для стекового фрейма). В совсем маленьких контроллерах и эти 4 байта на вес золото. А вы говорите malloc...
--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
|
|
|
|
|
Sep 12 2013, 12:43
|
Профессионал
    
Группа: Свой
Сообщений: 1 351
Регистрация: 21-05-10
Пользователь №: 57 439

|
Цитата(demiurg_spb @ Sep 12 2013, 10:42)  Ничем не лучше. Если компилятор умеет хорошо это делать, почему бы и нет? Например iar-avr это делает отлично, а avr-gcc плохо. Создание динамического массива любого размера фактически не несёт никаких накладных расходов (кроме пары коррекций вершины стека, что в iar выливается в 2 асм-инструкции или в ноль инструкций, если и так в процедуре выделялось место для стекового фрейма). В совсем маленьких контроллерах и эти 4 байта на вес золото. А вы говорите malloc... Засада в том, что нет никаких способов контроля переполнения стека на момент компиляции и когда в rutime стек переполнится на крутом процессоре вы получите ексепшн, а на маленьком AVR трудноуловимые и плоховоспроизводимые странности поведения. Без никаких намеков на то, что в реальности происходит. Цитата(demiurg_spb @ Sep 12 2013, 10:42)  В совсем маленьких контроллерах и эти 4 байта на вес золото. А вы говорите malloc... В совсем маленьких нет необходимости в динамической алокации массивов  Я всегда обходился. Цитата(MrYuran @ Sep 12 2013, 11:00)  Создание - да, а разрушение? Не говоря уже о сборке мусора. Проще не пользоваться динамически создаваемыми массивами
Сообщение отредактировал Tarbal - Sep 12 2013, 12:40
|
|
|
|
|
Sep 12 2013, 12:56
|

неотягощённый злом
     
Группа: Свой
Сообщений: 2 746
Регистрация: 31-01-08
Из: Санкт-Петербург
Пользователь №: 34 643

|
Цитата(Tarbal @ Sep 12 2013, 16:43)  Засада в том, что нет никаких способов контроля переполнения стека на момент компиляции и когда в rutime стек переполнится на крутом процессоре вы получите ексепшн, а на маленьком AVR трудноуловимые и плоховоспроизводимые странности поведения. Без никаких намеков на то, что в реальности происходит. Никакой разницы нет. Вот на куче выделили в очередной раз память - с контролем и всеми делами. А в это же время стек взял и наехал на кучу. Повторюсь, нет никаких преимуществ у кучи перед стеком. Тут всё просто, памяти либо хватает либо нет. Алгоритм оптимальный или нет. И в конечном итоге всё сводится к тому, что работает или нет. А если работает и выполняет требования ТЗ - всё, оплата в кармане, ну или на карточке))) Цитата В совсем маленьких нет необходимости в динамической алокации массивов  я тоже, но случаи бывают разные.
--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
|
|
|
|
|
Sep 13 2013, 12:29
|
Профессионал
    
Группа: Свой
Сообщений: 1 351
Регистрация: 21-05-10
Пользователь №: 57 439

|
Цитата(demiurg_spb @ Sep 13 2013, 10:38)  Не соглашусь с вами. Попытка наезда кучей вызовет ошибку компиляции и никогда не будет пропущена. С наездом стэка такое невозможно, а значит в реальности только стек и будет наезжать. По поводу алгоритмов. Алгоритмы надо улучшать. В ембеддед программировании требования покруче чем при написании апликаций на PC
Сообщение отредактировал IgorKossak - Sep 13 2013, 14:54
Причина редактирования: бездумное цитирование
|
|
|
|
Сообщений в этой теме
Navovvol Динамические переменные и массивы Sep 2 2013, 07:51   MrYuran Цитата(demiurg_spb @ Sep 12 2013, 09:42) ... Sep 12 2013, 07:00    demiurg_spb Цитата(MrYuran @ Sep 12 2013, 11:00) Созд... Sep 12 2013, 07:27     MrYuran Цитата(demiurg_spb @ Sep 12 2013, 10:27) ... Sep 12 2013, 07:52      demiurg_spb Цитата(MrYuran @ Sep 12 2013, 11:52) Знач... Sep 12 2013, 08:17        demiurg_spb Цитата(Tarbal @ Sep 13 2013, 16:29) Попыт... Sep 13 2013, 12:40         Tarbal Цитата(demiurg_spb @ Sep 13 2013, 16:40) ... Sep 13 2013, 13:22          kolobok0 Цитата(Tarbal @ Sep 13 2013, 17:22) ..А в... Sep 13 2013, 14:51          demiurg_spb Цитата(Tarbal @ Sep 13 2013, 17:22) Скажи... Sep 13 2013, 15:03           Tarbal Цитата(demiurg_spb @ Sep 13 2013, 19:03) ... Sep 13 2013, 15:24 Bear_ku The operators new and delete are not implemented, ... Sep 2 2013, 08:05 Navovvol Спасибо. Если задуманное получиться, покажу, что ... Sep 2 2013, 08:51 DASM На самом деле в эмбеддед всякие alloc штука хороша... Sep 13 2013, 13:35 Tarbal Цитата(DASM @ Sep 13 2013, 17:35) На само... Sep 13 2013, 13:50 Tarbal Цитата(DASM @ Sep 13 2013, 17:35) На само... Sep 13 2013, 14:08 DASM Причем тут рекурсия вообще ? Данные принимаются в ... Sep 13 2013, 14:01 DASM Да не буду я ничего приводить, берете какие-то лев... Sep 13 2013, 14:28 Tarbal Цитата(DASM @ Sep 13 2013, 18:28) Да не б... Sep 13 2013, 14:48  DASM Цитата(Tarbal @ Sep 13 2013, 18:48) а во-... Sep 13 2013, 14:52   Tarbal Цитата(DASM @ Sep 13 2013, 18:52) "А... Sep 13 2013, 14:58 DASM Вобщем malloc использовать стал в микроконтролерах... Sep 13 2013, 15:42 Tarbal Цитата(DASM @ Sep 13 2013, 19:42) Вобщем ... Sep 13 2013, 15:58 DASM Не слишком . Это гораздо безопаснее всего остально... Sep 13 2013, 16:07 Tarbal Цитата(DASM @ Sep 13 2013, 20:07) Не слиш... Sep 13 2013, 19:46  _Pasha Цитата(Tarbal @ Sep 13 2013, 22:46) СОЗДА... Sep 14 2013, 04:57   DASM Цитата(_Pasha @ Sep 14 2013, 08:57) Очеви... Sep 14 2013, 06:50    _Pasha Цитата(DASM @ Sep 14 2013, 09:50) Один во... Sep 14 2013, 12:27 IgorKossak Tarbal, смотрите мой комментарий к Вашему предыдущ... Sep 13 2013, 16:09 DASM Динамические на стеке ? Это как ? Учить Вас и не д... Sep 14 2013, 04:33 Tarbal Цитата(DASM @ Sep 14 2013, 08:33) Динамич... Sep 15 2013, 23:52  demiurg_spb Цитата(Tarbal @ Sep 16 2013, 03:52) А вы ... Sep 30 2013, 07:13 Tarbal Куда ушли те времена, когда требовалось мастерство... Sep 14 2013, 13:49 _Pasha Кстати, понравившийся многим манагер кучи от Zltig... Sep 14 2013, 22:06
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|