Både malloc() og nye i C++ bruges til samme formål. De bruges til at allokere hukommelse ved kørsel. Men malloc() og new har forskellig syntaks. Den største forskel mellem malloc() og new er, at den nye er en operator, mens malloc() er en standard biblioteksfunktion, der er foruddefineret i en stdlib header-fil.
Hvad er nyt?
Det nye er en hukommelsesallokeringsoperator, som bruges til at allokere hukommelsen under kørsel. Hukommelsen initialiseret af den nye operatør er allokeret i en heap. Det returnerer startadressen for hukommelsen, som bliver tildelt variablen. Funktionaliteten af den nye operator i C++ ligner malloc()-funktionen, som blev brugt i C programmeringssprog . C++ er også kompatibel med malloc()-funktionen, men den nye operator bruges mest på grund af dens fordele.
netværk og internet
Syntaks for ny operator
type variable = new type(parameter_list);
I ovenstående syntaks
type: Den definerer datatypen for den variabel, som hukommelsen er allokeret til af den nye operatør.
variabel: Det er navnet på variablen, der peger på hukommelsen.
parameter_list: Det er listen over værdier, der initialiseres til en variabel.
Den nye operator bruger ikke sizeof() operatoren til at allokere hukommelsen. Den bruger heller ikke størrelsesændringen, da den nye operatør tildeler tilstrækkelig hukommelse til et objekt. Det er en konstruktion, der kalder konstruktøren på tidspunktet for erklæringen for at initialisere et objekt.
Som vi ved, at den nye operatør allokerer hukommelsen i en bunke; hvis hukommelsen ikke er tilgængelig i en bunke, og den nye operatør forsøger at allokere hukommelsen, bliver undtagelsen kastet. Hvis vores kode ikke er i stand til at håndtere undtagelsen, vil programmet blive afsluttet unormalt.
Lad os forstå den nye operatør gennem et eksempel.
#include using namespace std; int main() { int *ptr; // integer pointer variable declaration ptr=new int; // allocating memory to the pointer variable ptr. std::cout << 'Enter the number : ' <>*ptr; std::cout << 'Entered number is ' <<*ptr<< std::endl; return 0; } < pre> <p> <strong>Output:</strong> </p> <img src="//techcodeview.com/img/c-tutorial/80/malloc-vs-new-c.webp" alt="malloc() vs new in C++"> <h3>What is malloc()?</h3> <p>A malloc() is a function that allocates memory at the runtime. This function returns the void pointer, which means that it can be assigned to any pointer type. This void pointer can be further typecast to get the pointer that points to the memory of a specified type.</p> <p>The syntax of the malloc() function is given below:</p> <pre> type variable_name = (type *)malloc(sizeof(type)); </pre> <p> <strong>where,</strong> </p> <p> <strong>type:</strong> it is the datatype of the variable for which the memory has to be allocated.</p> <p> <strong>variable_name:</strong> It defines the name of the variable that points to the memory.</p> <p> <strong>(type*):</strong> It is used for typecasting so that we can get the pointer of a specified type that points to the memory.</p> <p> <strong>sizeof():</strong> The sizeof() operator is used in the malloc() function to obtain the memory size required for the allocation.</p> <h4>Note: The malloc() function returns the void pointer, so typecasting is required to assign a different type to the pointer. The sizeof() operator is required in the malloc() function as the malloc() function returns the raw memory, so the sizeof() operator will tell the malloc() function how much memory is required for the allocation.</h4> <p>If the sufficient memory is not available, then the memory can be resized using realloc() function. As we know that all the dynamic memory requirements are fulfilled using heap memory, so malloc() function also allocates the memory in a heap and returns the pointer to it. The heap memory is very limited, so when our code starts execution, it marks the memory in use, and when our code completes its task, then it frees the memory by using the free() function. If the sufficient memory is not available, and our code tries to access the memory, then the malloc() function returns the NULL pointer. The memory which is allocated by the malloc() function can be deallocated by using the free() function.</p> <p> <strong>Let's understand through an example.</strong> </p> <pre> #include #include using namespace std; int main() { int len; // variable declaration std::cout << 'Enter the count of numbers :' <> len; int *ptr; // pointer variable declaration ptr=(int*) malloc(sizeof(int)*len); // allocating memory to the poiner variable for(int i=0;i<len;i++) { std::cout << 'enter a number : ' <> *(ptr+i); } std::cout << 'Entered elements are : ' << std::endl; for(int i=0;i<len;i++) { std::cout << *(ptr+i) std::endl; } free(ptr); return 0; < pre> <p> <strong>Output:</strong> </p> <img src="//techcodeview.com/img/c-tutorial/80/malloc-vs-new-c-2.webp" alt="malloc() vs new in C++"> <p>If we do not use the <strong>free()</strong> function at the correct place, then it can lead to the cause of the dangling pointer. <strong>Let's understand this scenario through an example.</strong> </p> <pre> #include #include using namespace std; int *func() { int *p; p=(int*) malloc(sizeof(int)); free(p); return p; } int main() { int *ptr; ptr=func(); free(ptr); return 0; } </pre> <p>In the above code, we are calling the func() function. The func() function returns the integer pointer. Inside the func() function, we have declared a *p pointer, and the memory is allocated to this pointer variable using malloc() function. In this case, we are returning the pointer whose memory is already released. The ptr is a dangling pointer as it is pointing to the released memory location. Or we can say ptr is referring to that memory which is not pointed by the pointer.</p> <p>Till now, we get to know about the new operator and the malloc() function. Now, we will see the differences between the new operator and the malloc() function.</p> <h3>Differences between the malloc() and new</h3> <img src="//techcodeview.com/img/c-tutorial/80/malloc-vs-new-c-3.webp" alt="malloc() vs new in C++"> <ul> <li>The new operator constructs an object, i.e., it calls the constructor to initialize an object while <strong>malloc()</strong> function does not call the constructor. The new operator invokes the constructor, and the delete operator invokes the destructor to destroy the object. This is the biggest difference between the malloc() and new.</li> <li>The new is an operator, while malloc() is a predefined function in the stdlib header file.</li> <li>The operator new can be overloaded while the malloc() function cannot be overloaded.</li> <li>If the sufficient memory is not available in a heap, then the new operator will throw an exception while the malloc() function returns a NULL pointer.</li> <li>In the new operator, we need to specify the number of objects to be allocated while in malloc() function, we need to specify the number of bytes to be allocated.</li> <li>In the case of a new operator, we have to use the delete operator to deallocate the memory. But in the case of malloc() function, we have to use the free() function to deallocate the memory.</li> </ul> <p> <strong>Syntax of new operator</strong> </p> <pre> type reference_variable = new type name; </pre> <p> <strong>where,</strong> </p> <p> <strong>type:</strong> It defines the data type of the reference variable.</p> <p> <strong>reference_variable:</strong> It is the name of the pointer variable.</p> <p> <strong>new:</strong> It is an operator used for allocating the memory.</p> <p> <strong>type name:</strong> It can be any basic data type.</p> <p> <strong>For example,</strong> </p> <pre> int *p; p = new int; </pre> <p>In the above statements, we are declaring an integer pointer variable. The statement <strong>p = new int;</strong> allocates the memory space for an integer variable.</p> <p> <strong>Syntax of malloc() is given below:</strong> </p> <pre> int *ptr = (data_type*) malloc(sizeof(data_type)); </pre> <p> <strong>ptr:</strong> It is a pointer variable.</p> <p> <strong>data_type:</strong> It can be any basic data type.</p> <p> <strong>For example,</strong> </p> <pre> int *p; p = (int *) malloc(sizeof(int)) </pre> <p>The above statement will allocate the memory for an integer variable in a heap, and then stores the address of the reserved memory in 'p' variable.</p> <ul> <li>On the other hand, the memory allocated using malloc() function can be deallocated using the free() function.</li> <li>Once the memory is allocated using the new operator, then it cannot be resized. On the other hand, the memory is allocated using malloc() function; then, it can be reallocated using realloc() function.</li> <li>The execution time of new is less than the malloc() function as new is a construct, and malloc is a function.</li> <li>The new operator does not return the separate pointer variable; it returns the address of the newly created object. On the other hand, the malloc() function returns the void pointer which can be further typecast in a specified type.</li> </ul> <hr></len;i++)></len;i++)></pre></*ptr<<>
hvor,
type: det er datatypen for den variabel, som hukommelsen skal allokeres til.
variabel_navn: Den definerer navnet på den variabel, der peger på hukommelsen.
c# indeholder streng
(type*): Det bruges til typecasting, så vi kan få markøren af en specificeret type, der peger på hukommelsen.
størrelse på(): Operatoren sizeof() bruges i malloc()-funktionen for at opnå den hukommelsesstørrelse, der kræves til allokeringen.
Bemærk: malloc()-funktionen returnerer void-markøren, så typecasting er påkrævet for at tildele en anden type til markøren. operatoren sizeof() er påkrævet i malloc()-funktionen, da malloc()-funktionen returnerer den rå hukommelse, så operatoren sizeof() vil fortælle malloc()-funktionen, hvor meget hukommelse der kræves til allokeringen.
Hvis den tilstrækkelige hukommelse ikke er tilgængelig, kan størrelsen på hukommelsen ændres ved hjælp af realloc()-funktionen. Da vi ved, at alle de dynamiske hukommelseskrav er opfyldt ved brug af heap-hukommelse, så allokerer malloc()-funktionen også hukommelsen i en heap og returnerer markøren til den. Heap-hukommelsen er meget begrænset, så når vores kode starter udførelse, markerer den hukommelsen i brug, og når vores kode fuldfører sin opgave, så frigør den hukommelsen ved at bruge free()-funktionen. Hvis den tilstrækkelige hukommelse ikke er tilgængelig, og vores kode forsøger at få adgang til hukommelsen, returnerer malloc()-funktionen NULL-markøren. Hukommelsen, som er allokeret af malloc()-funktionen kan deallokeres ved at bruge free()-funktionen.
Lad os forstå gennem et eksempel.
#include #include using namespace std; int main() { int len; // variable declaration std::cout << 'Enter the count of numbers :' <> len; int *ptr; // pointer variable declaration ptr=(int*) malloc(sizeof(int)*len); // allocating memory to the poiner variable for(int i=0;i<len;i++) { std::cout << \'enter a number : \' <> *(ptr+i); } std::cout << 'Entered elements are : ' << std::endl; for(int i=0;i<len;i++) { std::cout << *(ptr+i) std::endl; } free(ptr); return 0; < pre> <p> <strong>Output:</strong> </p> <img src="//techcodeview.com/img/c-tutorial/80/malloc-vs-new-c-2.webp" alt="malloc() vs new in C++"> <p>If we do not use the <strong>free()</strong> function at the correct place, then it can lead to the cause of the dangling pointer. <strong>Let's understand this scenario through an example.</strong> </p> <pre> #include #include using namespace std; int *func() { int *p; p=(int*) malloc(sizeof(int)); free(p); return p; } int main() { int *ptr; ptr=func(); free(ptr); return 0; } </pre> <p>In the above code, we are calling the func() function. The func() function returns the integer pointer. Inside the func() function, we have declared a *p pointer, and the memory is allocated to this pointer variable using malloc() function. In this case, we are returning the pointer whose memory is already released. The ptr is a dangling pointer as it is pointing to the released memory location. Or we can say ptr is referring to that memory which is not pointed by the pointer.</p> <p>Till now, we get to know about the new operator and the malloc() function. Now, we will see the differences between the new operator and the malloc() function.</p> <h3>Differences between the malloc() and new</h3> <img src="//techcodeview.com/img/c-tutorial/80/malloc-vs-new-c-3.webp" alt="malloc() vs new in C++"> <ul> <li>The new operator constructs an object, i.e., it calls the constructor to initialize an object while <strong>malloc()</strong> function does not call the constructor. The new operator invokes the constructor, and the delete operator invokes the destructor to destroy the object. This is the biggest difference between the malloc() and new.</li> <li>The new is an operator, while malloc() is a predefined function in the stdlib header file.</li> <li>The operator new can be overloaded while the malloc() function cannot be overloaded.</li> <li>If the sufficient memory is not available in a heap, then the new operator will throw an exception while the malloc() function returns a NULL pointer.</li> <li>In the new operator, we need to specify the number of objects to be allocated while in malloc() function, we need to specify the number of bytes to be allocated.</li> <li>In the case of a new operator, we have to use the delete operator to deallocate the memory. But in the case of malloc() function, we have to use the free() function to deallocate the memory.</li> </ul> <p> <strong>Syntax of new operator</strong> </p> <pre> type reference_variable = new type name; </pre> <p> <strong>where,</strong> </p> <p> <strong>type:</strong> It defines the data type of the reference variable.</p> <p> <strong>reference_variable:</strong> It is the name of the pointer variable.</p> <p> <strong>new:</strong> It is an operator used for allocating the memory.</p> <p> <strong>type name:</strong> It can be any basic data type.</p> <p> <strong>For example,</strong> </p> <pre> int *p; p = new int; </pre> <p>In the above statements, we are declaring an integer pointer variable. The statement <strong>p = new int;</strong> allocates the memory space for an integer variable.</p> <p> <strong>Syntax of malloc() is given below:</strong> </p> <pre> int *ptr = (data_type*) malloc(sizeof(data_type)); </pre> <p> <strong>ptr:</strong> It is a pointer variable.</p> <p> <strong>data_type:</strong> It can be any basic data type.</p> <p> <strong>For example,</strong> </p> <pre> int *p; p = (int *) malloc(sizeof(int)) </pre> <p>The above statement will allocate the memory for an integer variable in a heap, and then stores the address of the reserved memory in 'p' variable.</p> <ul> <li>On the other hand, the memory allocated using malloc() function can be deallocated using the free() function.</li> <li>Once the memory is allocated using the new operator, then it cannot be resized. On the other hand, the memory is allocated using malloc() function; then, it can be reallocated using realloc() function.</li> <li>The execution time of new is less than the malloc() function as new is a construct, and malloc is a function.</li> <li>The new operator does not return the separate pointer variable; it returns the address of the newly created object. On the other hand, the malloc() function returns the void pointer which can be further typecast in a specified type.</li> </ul> <hr></len;i++)></len;i++)>
I ovenstående kode kalder vi func()-funktionen. Funktionen func() returnerer heltalsmarkøren. Inde i func()-funktionen har vi erklæret en *p-pointer, og hukommelsen er allokeret til denne pointervariabel ved hjælp af malloc()-funktionen. I dette tilfælde returnerer vi den markør, hvis hukommelse allerede er frigivet. Ptr'en er en dinglende pointer, da den peger på den frigivne hukommelsesplacering. Eller vi kan sige, at ptr henviser til den hukommelse, som ikke peges af markøren.
Indtil nu får vi at vide om den nye operator og malloc()-funktionen. Nu vil vi se forskellene mellem den nye operator og malloc()-funktionen.
Forskelle mellem malloc() og new
- Den nye operatør konstruerer et objekt, dvs. den kalder konstruktøren for at initialisere et objekt mens malloc() funktion kalder ikke konstruktøren. Den nye operator kalder konstruktøren, og delete-operatoren kalder destruktoren for at ødelægge objektet. Dette er den største forskel mellem malloc() og new.
- Den nye er en operator, mens malloc() er en foruddefineret funktion i stdlib header-filen.
- Operatøren new kan overbelastes, mens malloc()-funktionen ikke kan overbelastes.
- Hvis den tilstrækkelige hukommelse ikke er tilgængelig i en heap, vil den nye operatør kaste en undtagelse, mens malloc()-funktionen returnerer en NULL-pointer.
- I den nye operator skal vi angive antallet af objekter, der skal allokeres, mens vi i malloc()-funktionen skal angive antallet af bytes, der skal tildeles.
- I tilfælde af en ny operatør, skal vi bruge delete-operatøren til at tildele hukommelsen. Men i tilfælde af malloc()-funktionen, skal vi bruge free()-funktionen til at deallokere hukommelsen.
Syntaks for ny operator
type reference_variable = new type name;
hvor,
type: Den definerer datatypen for referencevariablen.
reference_variable: Det er navnet på pointervariablen.
json fra java-objekt
ny: Det er en operatør, der bruges til at allokere hukommelsen.
type navn: Det kan være enhver grundlæggende datatype.
For eksempel,
int *p; p = new int;
I ovenstående udsagn erklærer vi en heltal pointervariabel. Udtalelsen p = ny int; allokerer hukommelsespladsen til en heltalsvariabel.
Syntaks for malloc() er angivet nedenfor:
int *ptr = (data_type*) malloc(sizeof(data_type));
ptr: Det er en pointervariabel.
datatype: Det kan være enhver grundlæggende datatype.
For eksempel,
hvad er regex java
int *p; p = (int *) malloc(sizeof(int))
Ovenstående sætning vil allokere hukommelsen for en heltalsvariabel i en heap, og derefter gemmer adressen på den reserverede hukommelse i 'p'-variablen.
- På den anden side kan hukommelsen allokeret ved hjælp af malloc()-funktionen deallokeres ved hjælp af free()-funktionen.
- Når hukommelsen er allokeret ved hjælp af den nye operator, kan den ikke ændres. På den anden side allokeres hukommelsen ved hjælp af malloc()-funktionen; derefter kan det omallokeres ved hjælp af realloc()-funktionen.
- Udførelsestiden for new er mindre end malloc()-funktionen, da new er en konstruktion, og malloc er en funktion.
- Den nye operator returnerer ikke den separate pointervariabel; det returnerer adressen på det nyoprettede objekt. På den anden side returnerer malloc()-funktionen void-markøren, som kan typecastes yderligere i en specificeret type.
*ptr<<>