|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
27.04.2013, 14:00 | #1 |
Форумчанин
Регистрация: 22.12.2011
Сообщений: 378
|
new или malloc
Чем лучше выделять динамическую память? Просто некоторые говорят что new типа с косяками. Правда ли это?
Большинство хороших программистов делают свою работу не потому, что ожидают оплаты или признания, а потому что получают удовольствие от программирования.
|
27.04.2013, 14:17 | #2 |
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,097
|
Какими косяками?
Как ты через alloc() выделишь память для объекта, да еще и удобно для тебя создашь его там?
I'm learning to live...
|
27.04.2013, 14:56 | #3 |
Старожил
Регистрация: 28.01.2009
Сообщений: 21,000
|
c++ только new.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел. Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите. |
27.04.2013, 15:18 | #4 |
Linux C++ Qt ARM
Старожил
Регистрация: 30.11.2008
Сообщений: 3,030
|
new не просто выделит память, но и вызовет конструктор. delete, соответственно, вызовет деструктор прежде чем освободит память.
malloc только выделяет память. Он неприменим для выделения памяти под объекты.
Дилетант широкого профиля.
"Слова ничего не стоят - покажите мне код!" © Линус Торвальдс |
27.04.2013, 15:26 | #5 | |
Старожил
Регистрация: 16.12.2011
Сообщений: 2,329
|
Цитата:
Он применим везде, где нужно выделить память под объект. разместить объект в уже выделенной области памяти можно при помощи new placement. Область использования: если фрагментация кучи позволяет, то сишный аллокатор может при реалоке увеличить размер блока без его смещения. с++ new такое не умеет. Поэтому, на крестах, даже минимальное увеличение размера блока приводит к перемещению всего куска данных на новое место. Поскольку аллокаторы - это очень дорогие функции, то в целях оптимизации можно использовать сишные аллокаторы, и new placement Хотя, моё личное мнение: если так сильно парит производительность работы с памятью, то лучше смотреть в сторону моральных пулов, а не плодить суржик из си/с++ стилей Последний раз редактировалось _Bers; 27.04.2013 в 15:29. |
|
28.04.2013, 16:26 | #6 |
Форумчанин
Регистрация: 22.12.2011
Сообщений: 378
|
Спасибо всем за ответы)))). Решение принял
Большинство хороших программистов делают свою работу не потому, что ожидают оплаты или признания, а потому что получают удовольствие от программирования.
|
17.01.2014, 23:30 | #7 | |
Форумчанин
Регистрация: 11.12.2010
Сообщений: 116
|
Цитата:
Например выделить участок памяти и разместить объект с помощью new placement. Где можно почитать подробнее, что при этом происходит? |
|
18.01.2014, 09:44 | #8 | |
Старожил
Регистрация: 13.07.2012
Сообщений: 6,342
|
new работает через malloc, только не надо будет делать cast и не надо вызывать конструктор.
new можно переопределить - для всей программы или для отдельных объектов и все, что предложил bers сделать в самом new. Насчет перемещения памяти - malloc точно так же этого не умеет, для этого есть realloc - это две разные фунцкии, соотвественно не следует утверждать, что new не умеет менять блоки. Коллекции, которым надо менять размер (а это собственно только vector) делают свистопляску с выделением совсем умышленно - таким образом объект узнает, что он переместился и может предпринят необходимые действия. Скорость работы new и malloc абсолютно сопоставима, но сравните код: Код:
Код:
Цитата:
Код:
new (ptr + index * sizeof(CObject)) CObject; и создавать сам объект и тем самым избегать частых вызовов malloc но этот путь не для новичков! Последний раз редактировалось Stilet; 18.01.2014 в 10:07. |
|
18.01.2014, 10:24 | #9 |
Форумчанин
Регистрация: 11.12.2010
Сообщений: 116
|
Нашел небольшой код для распределения памяти для структуры и попытался его как-то использовать. Вот сам код и моя небольшая программа:
Код:
В чем преимущества такого подхода к распределению памяти? Автор пишет о недостатках такого подхода к памяти из-за кеша. |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Работа с malloc() в СИ | murtukov | Помощь студентам | 2 | 30.01.2013 09:24 |
функция malloc | M9ICKO | Общие вопросы C/C++ | 26 | 26.07.2012 01:48 |
malloc в С++ | _Kitten_ | Помощь студентам | 2 | 12.12.2011 19:20 |
Malloc | Sabin4ik | Общие вопросы C/C++ | 12 | 18.02.2011 01:13 |
SIEGSEGV в malloc() | TheVampire | Общие вопросы C/C++ | 0 | 25.09.2009 14:32 |