Каково различие между новым/удаляют и malloc/free?

279
задан Community 23 May 2017 в 01:33
поделиться

8 ответов

новый/удаляющий

  • Выделяют/выпускают память
    1. Память, выделенная от 'Свободного Хранилища'
    2. Возвраты полностью введенный указатель.
    3. новый (стандартная версия) никогда не возвращается, ПУСТОЙ УКАЗАТЕЛЬ (бросит на отказ)
    4. , названы с Идентификатором типа (компилятор вычисляет, размер)
    5. Имеет версию явно для обработки массивов.
    6. Перераспределение (для получения большего количества пространства) не обработанный интуитивно (из-за конструктора копии).
    7. , Называют ли они malloc/free, определенная реализация.
    8. Может добавить новое средство выделения памяти для контакта с низкой памятью (set_new_handler)
    9. , оператор, new/delete, может быть переопределен по закону
    10. , конструктор/деструктор раньше инициализировал/уничтожал объект

, malloc/free

  • Выделяет/выпускает память
    1. Память, выделенная от '"кучи"'
    2. Возвраты пустота*
    3. , ПУСТОЙ УКАЗАТЕЛЬ Возвратов при отказе
    4. Должен определить размер, требуемый в байтах.
    5. массив Выделения требует ручного вычисления пространства.
    6. Перераспределяющий больший блок простой памяти (Никакой конструктор копии для волнения о)
    7. Они будут НЕ , называют новыми/удаляющими
    8. Никакой способ соединить пользовательский код в последовательность выделения для помощи с низкой памятью.
    9. malloc/free может НЕ быть переопределенным по закону

сравнение Таблицы функций:

 Feature                  | new/delete                     | malloc/free                   
--------------------------+--------------------------------+-------------------------------
 Memory allocated from    | 'Free Store'                   | 'Heap'                        
 Returns                  | Fully typed pointer            | void*                         
 On failure               | Throws (never returns NULL)    | Returns NULL                  
 Required size            | Calculated by compiler         | Must be specified in bytes    
 Handling arrays          | Has an explicit version        | Requires manual calculations  
 Reallocating             | Not handled intuitively        | Simple (no copy constructor)  
 Call of reverse          | Implementation defined         | No                            
 Low memory cases         | Can add a new memory allocator | Not handled by user code      
 Overridable              | Yes                            | No                            
 Use of (con-)/destructor | Yes                            | No                            

Технически память, выделенная новым, прибывает из 'Свободного Хранилища', в то время как память, выделенная malloc, прибывает из '"кучи"'. Является ли этими двумя областями то же, реализация детали, который является другой причиной, что malloc и новый не может быть смешан.

460
ответ дан 20 revs, 6 users 80% 23 November 2019 в 02:02
поделиться

new и delete C++ примитивы , которые объявляют новый экземпляр класса или удаляют его (таким образом вызов деструктора класса для экземпляра).

malloc и free функции C , и они выделяют и блоки свободной памяти (в размере).

Оба используют "кучу" для создания выделения. malloc и free, тем не менее, больше "низкого уровня", поскольку они просто резервируют блок пространства памяти, которое будет, вероятно, связано с указателем. Никакие структуры не создаются вокруг той памяти (если Вы не полагаете, что массив C структура).

3
ответ дан OmarOthman 23 November 2019 в 02:02
поделиться

также,

глобальные новые и удаляют, может быть переопределен, malloc/free не может.

дальнейший более новый и удаляют, может быть переопределен на тип.

4
ответ дан DanJ 23 November 2019 в 02:02
поделиться

Единственные общие черты - то, что malloc / new и возвратите указатель, который обращается к некоторой памяти на "куче", и они оба гарантируют, что, как только такой блок памяти был возвращен, это не будет возвращено снова, если Вы не освободите/удалите его сначала. Таким образом, они оба "выделяют" память.

Однако new / delete выполняют произвольную другую работу, кроме того, через конструкторов, деструкторы и перегрузку оператора. malloc / free только когда-либо выделяют и свободная память.

На самом деле, new достаточно настраиваемо, что это не обязательно возвращает память из "кучи", или даже выделяет память вообще. Однако значение по умолчанию new делает.

10
ответ дан Marius Bancila 23 November 2019 в 02:02
поделиться

new / delete C++, malloc / free прибывает из старого доброго C.

В C++, new вызовы конструктор объектов и delete вызовы деструктор.

malloc и free, прибывая со средневековья перед OO, только выделяют и освобождают память, не выполняя кода объекта.

13
ответ дан Marius Bancila 23 November 2019 в 02:02
поделиться

В C++ new / delete вызывают Конструктора/Деструктор соответственно.

malloc / free просто выделяют память от "кучи". new / delete выделяют память также.

13
ответ дан Marius Bancila 23 November 2019 в 02:02
поделиться

new вызовы ctor объекта, delete называют dtor.

malloc & free просто выделяют и освобождают необработанную память.

29
ответ дан James Curran 23 November 2019 в 02:02
поделиться

Самое соответствующее различие - то, что new оператор выделяет память, тогда вызывает конструктора, и delete вызовы, деструктор тогда освобождает память.

80
ответ дан Marius Bancila 23 November 2019 в 02:02
поделиться
Другие вопросы по тегам:

Похожие вопросы: