|
Использование операторов new и delete в embedded |
|
|
2 страниц
1 2 >
|
 |
Ответов
(1 - 26)
|
Jun 15 2010, 09:21
|
Гуру
     
Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448

|
Цитата(_Макс @ Jun 15 2010, 13:17)  За счет чего получается оверхед? За счет структур менеджера кучи. Цитата(_Макс @ Jun 15 2010, 13:17)  Сколько % он составляет по сравнению с чистой выделенной памятью? В случае трех байт, пожалуй, более 200%. Точно можно сказать только зная внутренности менеджера.
|
|
|
|
|
Jun 15 2010, 10:07
|
Местный
  
Группа: Свой
Сообщений: 279
Регистрация: 2-07-08
Из: Новосибирск
Пользователь №: 38 699

|
Еще один из минусов - нереентерабельность операций new/delete (как впрочем и malloc, free  ) Да и ИМХО - любая система, динамически аллоцирующая память, должна обрабатывать возможность ее невыделения. Как в этом случае должна будет поступить embedded система, чтоб разработчику не было стыдно? )))
|
|
|
|
|
Jun 15 2010, 10:38
|
Знающий
   
Группа: Участник
Сообщений: 691
Регистрация: 24-05-07
Пользователь №: 27 945

|
Переписал push и pop, было: Код 9 030 bytes of readonly code memory 72 bytes of readonly data memory 2 086 bytes of readwrite data memory Cтало с буфером 300 байт, без единиого иного new: Код 8 926 bytes of readonly code memory 128 bytes of readonly data memory 1 862 bytes of readwrite data memory Без особых улучшений, но работает теперь стабильно.
|
|
|
|
|
Jun 15 2010, 10:46
|

Беспросветный оптимист
     
Группа: Свой
Сообщений: 4 640
Регистрация: 26-12-07
Из: Н.Новгород
Пользователь №: 33 646

|
Цитата(_Макс @ Jun 15 2010, 14:38)  Без особых улучшений, но работает теперь стабильно. Статическая компоновка всегда более стабильная, чем динамическая. В крайнем случае, ошибки вывалятся на этапе компиляции, а не в работе. Что значит "без особых улучшений"? Во втором случае уже размещённый буфер занимает места меньше, чем в первом ещё не размещенный
--------------------
Программирование делится на системное и бессистемное. ©Моё :) — а для кого-то БГ — это Bill Gilbert =)
|
|
|
|
|
Jun 15 2010, 12:06
|

Гуру
     
Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095

|
Цитата(_Макс @ Jun 15 2010, 14:48)  Сэкономил 200 байт RAM и 100 байт ROM  Значит где-то еще new осталось. Менеджер кучи в 100 байт ну никак не уместится. Цитата(_Макс @ Jun 15 2010, 14:48)  Если new вызвано статически Это как? "Ппереведи!"
--------------------
На любой вопрос даю любой ответ"Write code that is guaranteed to work, not code that doesn’t seem to break" ( C++ FAQ)
|
|
|
|
|
Jun 15 2010, 12:19
|
Знающий
   
Группа: Участник
Сообщений: 691
Регистрация: 24-05-07
Пользователь №: 27 945

|
Цитата(Сергей Борщ @ Jun 15 2010, 15:06)  Значит где-то еще new осталось. Менеджер кучи в 100 байт ну никак не уместится. Это как? "Ппереведи!" Точно new больше нету, искал по исходнику. Я имел в виду например new int, на этапе компиляции известно о том сколько нужно выделить, значит это можно сделать заранее. Хотя сколько раз такой блок будет вызван неизвестно, только если это не конструктор...
|
|
|
|
|
Jun 15 2010, 13:09
|

Гуру
     
Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095

|
Цитата(_Макс @ Jun 15 2010, 15:19)  Точно new больше нету, искал по исходнику. Искать надо в .map Возможно, new или malloc использует какая-то из библиотечных функций. Цитата(_Макс @ Jun 15 2010, 15:19)  Хотя сколько раз такой блок будет вызван неизвестно, только если это не конструктор... Вот именно. И даже если конструктор - может быть создано несколько таких объектов. Часть статически, часть автоматически (локально), часть динамически.
--------------------
На любой вопрос даю любой ответ"Write code that is guaranteed to work, not code that doesn’t seem to break" ( C++ FAQ)
|
|
|
|
|
Jun 15 2010, 16:01
|
Местный
  
Группа: Свой
Сообщений: 279
Регистрация: 2-07-08
Из: Новосибирск
Пользователь №: 38 699

|
Цитата(sigmaN @ Jun 15 2010, 22:42)  Для введения статья пойдет, однако читать ее нужно вдумчиво. Тк есть несколько ляпов (подозреваю, что переводчика) https://www.ibm.com/developerworks/ru/edu/a...r/section2.htmlЦитата Такие функции, как malloc и new, являются выделителями памяти общего назначения. Ваша программа может быть однопоточной, однако, функцию malloc лучше использовать для многопоточных примеров. Дополнительная функциональность снижает производительность этой команды. https://www.ibm.com/developerworks/ru/edu/a...r/section5.htmlЦитата Каждое выполнение данного цикла вызывает 1000 выделений и перераспределений памяти. 5000 итераций цикла приводят к 10 миллионам переключений между кодом пользователя и кодом ядра. Компиляция данного теста при помощи gcc-3.4.6 на компьютере под управлением Solaris 10 заняла в среднем 3,5 секунды. Это базовый показатель производительности при использовании глобальных операторов new и delete и стандартного компилятора. Чтобы создать специальный диспетчер памяти для класса Complex, который оптимизирует компиляцию, вам необходимо переопределить Complex при помощи операторов new и delete, относящихся к данному классу.
|
|
|
|
|
Jun 16 2010, 09:22
|
■ ■ ■ ■
    
Группа: Свой
Сообщений: 1 100
Регистрация: 9-08-06
Пользователь №: 19 443

|
Цитата Почему? Написано выше, читайте. Поинтересуйтесь как работает манагер памяти и всё поймёте.
--------------------
Делай что должен и будь что будет.
|
|
|
|
|
Jun 16 2010, 10:01
|
Гуру
     
Группа: Свой
Сообщений: 3 123
Регистрация: 7-04-07
Из: Химки
Пользователь №: 26 847

|
Цитата(_Макс @ Jun 16 2010, 13:30)  Как можно узнать размер блоков Размер блока (обычно) не менее 2х указателей (на платформе), а может быть и больше Цитата и регулировать работу менеджера? Написать свой менеджер
|
|
|
|
|
Jun 16 2010, 14:05
|

I WANT TO BELIEVE
     
Группа: Свой
Сообщений: 2 617
Регистрация: 9-03-08
Пользователь №: 35 751

|
Цитата и регулировать работу менеджера? не использовать менеджер там где это реально не нужно и даже вредно. Т.е. не придумывать проблем, которые потом решать(писать свой менеджер). Всё гениальное - просто
--------------------
The truth is out there...
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|