реклама на сайте
подробности

 
 
> Динамические переменные и массивы, Можно ли задать динамические массивы ?
Navovvol
сообщение Sep 2 2013, 07:51
Сообщение #1


Частый гость
**

Группа: Участник
Сообщений: 105
Регистрация: 9-09-11
Пользователь №: 67 080



Буду краток. Работают ли операторы "new" и "delete" ? Есть ли их аналоги ? Проект делается на Си.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
demiurg_spb
сообщение Sep 2 2013, 07:55
Сообщение #2


неотягощённый злом
******

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



Цитата(Navovvol @ Sep 2 2013, 11:51) *
Буду краток. Работают ли операторы "new" и "delete" ? Есть ли их аналоги ? Проект делается на Си.

Нет в си нет "new" и "delete", зато есть malloc и free.
+ ещё есть такая возможность.


--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
Go to the top of the page
 
+Quote Post
Tarbal
сообщение Sep 11 2013, 17:04
Сообщение #3


Профессионал
*****

Группа: Свой
Сообщений: 1 351
Регистрация: 21-05-10
Пользователь №: 57 439



Цитата(demiurg_spb @ Sep 2 2013, 11:55) *
+ ещё есть такая возможность.


Для маленьких микропроцессоров не лучший способ создавать большие массивы в стеке.
Мне и для больших это не нравится. Лучше malloc() in heep.

Сообщение отредактировал Tarbal - Sep 11 2013, 17:04
Go to the top of the page
 
+Quote Post
demiurg_spb
сообщение Sep 12 2013, 06:42
Сообщение #4


неотягощённый злом
******

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



Цитата(Tarbal @ Sep 11 2013, 21:04) *
Для маленьких микропроцессоров не лучший способ создавать большие массивы в стеке.
Мне и для больших это не нравится. Лучше malloc() in heep.
Ничем не лучше.
Если компилятор умеет хорошо это делать, почему бы и нет?
Например iar-avr это делает отлично, а avr-gcc плохо.
Создание динамического массива любого размера фактически не несёт никаких накладных расходов (кроме пары коррекций вершины стека, что в iar выливается в 2 асм-инструкции или в ноль инструкций, если и так в процедуре выделялось место для стекового фрейма).
В совсем маленьких контроллерах и эти 4 байта на вес золото. А вы говорите malloc...


--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
Go to the top of the page
 
+Quote Post
Tarbal
сообщение Sep 12 2013, 12:43
Сообщение #5


Профессионал
*****

Группа: Свой
Сообщений: 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...


В совсем маленьких нет необходимости в динамической алокации массивов sm.gif
Я всегда обходился.



Цитата(MrYuran @ Sep 12 2013, 11:00) *
Создание - да, а разрушение?
Не говоря уже о сборке мусора.


Проще не пользоваться динамически создаваемыми массивами sm.gif

Сообщение отредактировал Tarbal - Sep 12 2013, 12:40
Go to the top of the page
 
+Quote Post
demiurg_spb
сообщение Sep 12 2013, 12:56
Сообщение #6


неотягощённый злом
******

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



Цитата(Tarbal @ Sep 12 2013, 16:43) *
Засада в том, что нет никаких способов контроля переполнения стека на момент компиляции и когда в rutime стек переполнится на крутом процессоре вы получите ексепшн, а на маленьком AVR трудноуловимые и плоховоспроизводимые странности поведения. Без никаких намеков на то, что в реальности происходит.
Никакой разницы нет. Вот на куче выделили в очередной раз память - с контролем и всеми делами. А в это же время стек взял и наехал на кучу.
Повторюсь, нет никаких преимуществ у кучи перед стеком.
Тут всё просто, памяти либо хватает либо нет. Алгоритм оптимальный или нет. И в конечном итоге всё сводится к тому, что работает или нет.
А если работает и выполняет требования ТЗ - всё, оплата в кармане, ну или на карточке)))

Цитата
В совсем маленьких нет необходимости в динамической алокации массивов sm.gif
я тоже, но случаи бывают разные.


--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
Go to the top of the page
 
+Quote Post
Tarbal
сообщение Sep 12 2013, 15:07
Сообщение #7


Профессионал
*****

Группа: Свой
Сообщений: 1 351
Регистрация: 21-05-10
Пользователь №: 57 439



Цитата(demiurg_spb @ Sep 12 2013, 16:56) *
Никакой разницы нет. Вот на куче выделили в очередной раз память - с контролем и всеми делами. А в это же время стек взял и наехал на кучу.
Повторюсь, нет никаких преимуществ у кучи перед стеком.
Тут всё просто, памяти либо хватает либо нет. Алгоритм оптимальный или нет. И в конечном итоге всё сводится к тому, что работает или нет.
А если работает и выполняет требования ТЗ - всё, оплата в кармане, ну или на карточке)))

я тоже, но случаи бывают разные.


Неверно. Стек сам по себе не наедет. Значит кто-то стеком неправильно пользуется. Алокация массивов на стеке это хороший способ наехать стеком. Если не делать таких вещей, то и проблем не будет. Использование кучи гарантирует от таких сюрпризов. Если нет фокусов с использованием стека.

Я сделал немало устройств и никогда не использовал динамическую алокацию. Значит можно обойтись.
Go to the top of the page
 
+Quote Post
demiurg_spb
сообщение Sep 13 2013, 06:38
Сообщение #8


неотягощённый злом
******

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



Спор бесполезен.
Вы не понимаете моей основной мысли, что неважно кто наедет (стек или куча), важно то, что использовании кучи более ресурсоёмко чем стека.
А использование динамических массивов иногда очень красиво решает проблему нехватки памяти.
Вот пример (только что выдумал):
Алгоритм 1 (требует более половины ОЗУ для своего выполнения)
Алгоритм 2 (требует более половины ОЗУ для своего выполнения)
...
Алгоритм N (требует более половины ОЗУ для своего выполнения)

И эти алгоритмы вызываются поочерёдно.
Очень красиво и просто решается с использованием стека.
Никаких лишних завязок на какой-то глобальный пул.
Никаких менеджеров памяти.
Ничего лишнего, только суть алгоритма. Не это-ли является нашей основной парадигмой?


--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
Go to the top of the page
 
+Quote Post
Tarbal
сообщение Sep 13 2013, 12:29
Сообщение #9


Профессионал
*****

Группа: Свой
Сообщений: 1 351
Регистрация: 21-05-10
Пользователь №: 57 439



Цитата(demiurg_spb @ Sep 13 2013, 10:38) *


Не соглашусь с вами. Попытка наезда кучей вызовет ошибку компиляции и никогда не будет пропущена. С наездом стэка такое невозможно, а значит в реальности только стек и будет наезжать.

По поводу алгоритмов. Алгоритмы надо улучшать. В ембеддед программировании требования покруче чем при написании апликаций на PC

Сообщение отредактировал IgorKossak - Sep 13 2013, 14:54
Причина редактирования: бездумное цитирование
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- 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


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 23rd July 2025 - 14:08
Рейтинг@Mail.ru


Страница сгенерированна за 0.01473 секунд с 7
ELECTRONIX ©2004-2016