|
901 / 478 / 93
Регистрация: 10.06.2014
Сообщений: 2,700
|
|
Выделение памяти с использованием ключевого слова new и исключения05.03.2017, 13:56. Показов 2051. Ответов 14
Метки нет (Все метки)
Где-то читал, что наличие в коде throw, даже в том случае когда нет try/catch может приводить к некоторым замедлению потому что где-то внутри генерируется специальный код что бы бросить исключение.
Верно ли данное утверждение? Если оно верно, выходит malloc может оказаться куда более эффективным чем new, просто потому что не кидает исключения? Добавлено через 2 минуты И как ведет себя в таких случаях placement new? Ведь он не выделяет память а просто использует переданный ему указатель. Он не бросается исключениями?
0
|
|
| 05.03.2017, 13:56 | |
|
Ответы с готовыми решениями:
14
Выделение памяти с использованием malloc Выделение памяти (CodeGear RAD Studio 2009 - C++ builder). Выделение памяти - консоль vs SDIApp Вывести все слова текста, которые нельзя составить из «ключевого» слова |
|
Ушел с форума
|
|||
| 05.03.2017, 20:39 | |||
|
предназначены для разных вещей? Тоже самое, что сравнивать скорость include в C и std::vector.push_back в C++...
3
|
|||
|
901 / 478 / 93
Регистрация: 10.06.2014
Сообщений: 2,700
|
|
| 05.03.2017, 20:46 [ТС] | |
|
0
|
|
|
Ушел с форума
|
|
| 05.03.2017, 20:56 | |
|
Ну в MS C++, например, new является простой оберткой над malloc,
которая проверяет возвращаемое значение, а затем конструирует объект. О каком выигрыше в скорости тогда может идти речь?
1
|
|
|
901 / 478 / 93
Регистрация: 10.06.2014
Сообщений: 2,700
|
|
| 05.03.2017, 20:58 [ТС] | |
|
Убежденный,
Ну new вроде как эксепшенами кидается... Значит где то под капотом должен быть throw Где то читал что throw чего-то там генерит что замедляет выполнение
0
|
|
|
Ушел с форума
|
|
| 05.03.2017, 21:12 | |
|
Ну не знаю, не знаю...
Глянул ассемблерный листинг new - там тупо malloc с проверкой на NULL. Если не NULL, то сразу выход. Иначе throw. Все. Никаких "побочных" накладных расходов, связанных с throw, не увидел.
1
|
|
|
2784 / 1937 / 570
Регистрация: 05.06.2014
Сообщений: 5,602
|
||
| 05.03.2017, 23:46 | ||
|
1
|
||
|
284 / 232 / 114
Регистрация: 07.09.2016
Сообщений: 584
|
|
| 05.03.2017, 23:56 | |
|
автор спрашивает что в рантайме под капотом происходит в случае бросания исключения.
какие приседания делаются в рантайме при наличии try/catch блоков в коде. естественно это все не бесплатно, проседание будет зависеть от реализации компилятора. но делать выбор в пользу маллока или еще какого-то другого механизма выделения памяти - это большая глупость. до тех пор, пока вы не уверены в том, что у вас производительность проседает именно из-за этого, писать по другому не стоит. сперва вообще стоит сделать корректно работающий вариант программы. и вот там, где нет исключений, раскрутки стека и прочих плюсовых плюшек написать корректную не текущую программу на много сложнее. допустим вы решились таки не глядя не использовать исключения. окей. получили программу, потратив в 3 раза больше времени и даже получили результат в производительности. она у вас работает в 1000!!!! раз быстрее, но в целом запускается раз в сутки и работает сто микросекунд, а не 10 миллисекунд. стоило оно того?
2
|
|
|
2784 / 1937 / 570
Регистрация: 05.06.2014
Сообщений: 5,602
|
||
| 06.03.2017, 00:51 | ||
|
Линукс стайл - malloc всегда успешно выделяет память, потому что технология overcommit (со своими веселыми граблями, да). Обработка ошибок выделения памяти просто ненужна. Вернее, она уже вшита в систему. Qt-стайл - ошибка выделения памяти, ведет к немедленному аварийному завершению процесса. Вот прям в недрах malloc. Так что никаких дополнительных обработок ошибок опять же не нужно. Ну да, такие фокусы тоже имеют свою цену, но вы прикиньте, код "в 1000!!!! раз быстрее".
1
|
||
|
284 / 232 / 114
Регистрация: 07.09.2016
Сообщений: 584
|
|
| 06.03.2017, 01:00 | |
|
окей. тогда неплохо бы замерить, на сколько наличие throw замедляет процесс выделения памяти. какая разница в процентах. есть у кого-нибудь данные?
сравнить скажем nothrow new, просто new и маллок какой-нибудь.
0
|
|
|
2784 / 1937 / 570
Регистрация: 05.06.2014
Сообщений: 5,602
|
||
| 06.03.2017, 01:29 | ||
|
Но повторюсь, основной смысл воевать с исключениями - сокращение исполняемого файла. Плюс-минус сто кило статически прилинкованных библиотек, это для маленького проектика весьма много.
1
|
||
|
Неэпический
|
|||
| 06.03.2017, 06:05 | |||
|
Собственно, вот
https://habrahabr.ru/post/208006/
1
|
|||
|
2784 / 1937 / 570
Регистрация: 05.06.2014
Сообщений: 5,602
|
|
| 06.03.2017, 06:08 | |
|
0
|
|
| 06.03.2017, 09:30 | |||||||
|
Не по теме:
Но я всегда вырубаю overcommit сразу после установки системы. Пусть уж лучше приложения падаю, если кривые, нежели жрут непомерно ресурсов. Какой-нибудь банальный
Собственно, когда одно моё тренировочное приложение для исследования утечек, стало вешать систему, вот тогда я и узнал о overcommit. :D
0
|
|||||||
|
|
||
| 06.03.2017, 12:52 | ||
|
В любом случае тормоза при работе new vs malloc с оглядкой на наличие 0eh - это просто мелочь по сравнению с тем, что в случае отсутствия 0eh будет обвес вокруг каждого вызова функции в тех местах, где присутствуют объекты с деструктором. Как уже выше описал коллега - в лучшем случае будет просто экономия на спичках. В худшем случае - программа превратится в бесконечно завёрнутую кишку ради экономии пару спичек
2
|
||
| 06.03.2017, 12:52 | |
|
Помогаю со студенческими работами здесь
15
Вывести слова, из которых нельзя составить ключевого слова, ключевое слово вводится отдельно
Записать в файл все ключевые слова, встречающиеся в программе, указав количество появлений ключевого слова Использование ключевого слова as учет ключевого слова? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
|
SDL3 для Web (WebAssembly): Сборка SDL3 из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
|
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога
Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
|
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование
. \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json>
Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом.
# Check if. . .
|
|
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так:
https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347
Основана на STM32F303RBT6.
На борту пять. . .
|
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
|
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу,
и светлой Луне.
В мире
покоя нет
и люди
не могут жить в тишине.
А жить им немного лет.
|
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила»
«Время-Деньги»
«Деньги -Пуля»
|