Różnica między nowymi a malloc ()

Autor: Laura McKinney
Data Utworzenia: 1 Kwiecień 2021
Data Aktualizacji: 5 Móc 2024
Anonim
Różnica między nowymi a malloc () - Technologia
Różnica między nowymi a malloc () - Technologia

Zawartość


Zarówno new, jak i malloc () służą do dynamicznego przydzielania pamięci. Chociaż nowe i malloc () różnią się pod wieloma względami. Główną różnicą między new a malloc () jest to Nowy jest operatorem używanym jako konstrukcja. Z drugiej strony malloc () to standardowa funkcja biblioteczna używana do przydzielania pamięci w czasie wykonywania. Inne różnice między nimi omówiono poniżej w tabeli porównawczej:

  1. Wykres porównania
  2. Definicja
  3. Kluczowe różnice
  4. Wniosek

Wykres porównania

Podstawa do porównaniaNowymalloc ()
JęzykNowy operator jest specyficzną funkcją C ++, Java i C #. Funkcja malloc () jest funkcją C.
Natura„nowy” to operator.malloc () jest funkcją.
rozmiar( )nowy nie potrzebuje operatora sizeof, ponieważ przeznacza wystarczającą ilość pamięci dla określonego typu malloc wymaga od operatora sizeof, aby wiedział, jaki rozmiar pamięci ma przydzielić.
Konstruktor Operator new może wywołać konstruktor obiektu.malloc () nie może w ogóle wywołać konstruktora.
InicjalizacjaOperator new może zainicjować obiekt, przydzielając mu pamięć.Inicjalizacji pamięci nie można było wykonać w Malloc.
Przeciążenie Nowy operator może być przeciążony.Malloc () nigdy nie może być przeciążony.
NiepowodzenieW przypadku awarii operator new zgłasza wyjątek.W przypadku niepowodzenia malloc () zwraca NULL.
ZwolnieniePrzydział pamięci przez nowy, zwolniony przy użyciu „usuń”.Przydział pamięci przez malloc () jest zwalniany za pomocą funkcji free ().
RealokacjaNowy operator nie dokonuje realokacji pamięci.Pamięć przydzieloną przez malloc () można ponownie przydzielić za pomocą realloc ().
WykonanieNowy operator skraca czas realizacji.Malloc () wymaga więcej czasu na wykonanie.


Definicja nowego

Operator Nowy to operator alokacji pamięci, który alokuje pamięć dynamicznie. Nowy operator przydziela pamięć na stercie i zwraca adres początkowy tej pamięci, która jest przypisana do zmiennej referencyjnej. Nowy operator jest podobny do malloc () w C. Jednak kompilator C ++ jest kompatybilny z malloc (), ale najlepiej jest użyć nowego operatora, ponieważ ma pewne zalety w stosunku do malloc (). Składnia nowego operatora jest następująca:

typ nazwa_zmiennej = nowy typ (lista_parametrów);

„Typ” oznacza tutaj typ danych zmiennej, dla której pamięć musi zostać przydzielona. Słowo „nazwa_zmiennej” to nazwa nadana zmiennej referencyjnej, która utrzymuje wskaźnik do pamięci. Nawias tutaj określa wywołanie konstruktora. Lista parametrów jest listą wartości przekazywanych do konstruktora w celu zainicjowania nowo zbudowanego obiektu.

Nowy operator przydziela wystarczającą ilość pamięci wymaganej dla obiektu określonego typu. Dlatego nie wymaga operatora sizeof () ani zmiany rozmiaru pamięci, tak jak malloc (), który używa realloc () do realokacji pamięci. Nowy operator jest konstrukcją; wywołuje konstruktor obiektu, podczas gdy deklaracja jest zwykle używana do inicjalizacji obiektu.


Wiemy, że nowy operator przydziela pamięć na stercie, a wielkość stosu jest ograniczona. Jeśli więc na stosie zabraknie pamięci, a nowy operator spróbuje przydzielić pamięć, doprowadzi to do awarii nowego operatora. Jeśli nowy operator nie przydzieli pamięci, zgłosi wyjątek, a jeśli Twój kod nie jest w stanie obsłużyć tego wyjątku, program kończy się nieprawidłowo.

Pamięć przydzieloną przez operatora new można zwolnić za pomocą operatora delete. Nowy operator skraca czas wykonania, ponieważ jest operatorem, a nie funkcją.

Definicja malloc ()

The malloc () to funkcja służąca do przydzielenia żądanej ilości pamięci na stercie. Metoda zwraca wskaźnik typu „void”, który jest dalej, wpisz rzut, aby uzyskać wskaźnik do pamięci określonego typu, a ten wskaźnik do pamięci jest przypisany do zmiennej referencyjnej. Funkcja malloc () jest podobna do nowego operatora w C ++, ponieważ służy do dynamicznego przydzielania pamięci. Malloc () jest standardową funkcją biblioteki. Składnia funkcji malloc () jest następująca:

typ nazwa_zmiennej = (typ *) malloc (sizeof (typ));

„Typ” wskazuje tutaj typ danych zmiennej, dla której pamięć musi zostać przydzielona. Zmienna_nazwa jest nazwą zmiennej referencyjnej, do której zostanie przypisany wskaźnik zwrócony przez malloc (). (Typ *) opisuje rzutowanie typu, aby uzyskać wskaźnik do pamięci w określonym typie. Sizeof () opisuje malloc (), czyli jaki rozmiar pamięci jest wymagany.

Malloc () wymaga rzutowania typu, ponieważ wskaźnik zwracany przez malloc () jest typu void, więc aby przypisać typ do wskaźnika, rzutowanie typu jest wymagane. Sizeof () jest wymagany, ponieważ funkcja malloc () przydziela surową pamięć, dlatego wymagane jest, aby powiedzieć funkcji malloc (), jaki rozmiar pamięci musi przydzielić. Jeśli przydzielona pamięć nie jest wystarczająca, można zmienić jej rozmiar lub ponownie przydzielić za pomocą realloc ().

Funkcja malloc () przydziela pamięć na stercie. W przypadku, gdy sterty brakuje pamięci, funkcja malloc () zwraca wskaźnik NULL. Dlatego zmienna referencyjna zawierająca wskaźnik zwracany przez malloc () powinna zostać sprawdzona przed użyciem, w przeciwnym razie może dojść do awarii systemu.

Pamięć przydzielona przez funkcję malloc () jest zwalniana za pomocą free (). Ponieważ wywołanie funkcji prowadzi do narzutu, malloc () wymaga więcej czasu na wykonanie.

  1. Nowy operator jest konstrukcją wprowadzoną w C ++ i używaną w Javie, C # itp. Z drugiej strony malloc () jest standardową funkcją biblioteki występującą tylko w języku C i obsługiwaną przez C ++.
  2. Nowy operator przydziela wystarczającą ilość pamięci dla obiektu określonego typu, więc nie wymaga operatora zmiany rozmiaru. Z drugiej strony funkcja malloc () wymaga operatora sizeof (), aby poinformować funkcję, jaki rozmiar pamięci musi przydzielić.
  3. Nowy operator może wywołać konstruktor obiektu podczas deklaracji. Z drugiej strony funkcja malloc () nie może wywołać konstruktora.
  4. Operator „nowy” może być przeciążony, ale malloc () nie.
  5. Jeśli nowy operator nie przydzieli pamięci, zgłasza wyjątek, który musi zostać obsłużony przez kod, w przeciwnym razie program zakończy działanie. Z drugiej strony funkcja malloc () zwraca wskaźnik NULL, jeśli nie przydzieli pamięci. Jeśli wskaźnik zostanie użyty bez sprawdzenia, spowoduje to awarię systemu.
  6. Pamięć przydzieloną za pomocą nowego operatora można zwolnić za pomocą polecenia „usuń”. Z drugiej strony pamięć przydzieloną za pomocą funkcji malloc () można zwolnić za pomocą free ().
  7. Po przydzieleniu pamięci za pomocą nowego operatora nie można zmienić jej rozmiaru. Z drugiej strony pamięć przydzieloną za pomocą funkcji malloc () można ponownie przydzielić (zmienić rozmiar) za pomocą funkcji realloc ().
  8. Czas wykonania new jest krótszy w porównaniu do malloc (), ponieważ malloc jest funkcją, a new jest konstrukcją.

Wniosek:

Funkcja malloc () to stary sposób na dynamiczne przydzielanie pamięci. Obecnie nowy operator służy do alokacji pamięci w czasie wykonywania, ponieważ ma pewne zalety w stosunku do malloc ().