Ir ao conteúdo
  • Cadastre-se
Lucas.San.tana

C++ Alloc, malloc ou new?

Recommended Posts

Olá colegas!
estou estudando ponteiros e me surgiu uma duvida com relação a alocação dinâmica de memora.

tipo, eu sei o que o calloc, malloc,  new fazem, e também sei que calloc e malloc são da biblioteca do C, porém

qual seria o melhor desses 3 para se fazer alocação dinâmica?

 

fiz um programinha basico utilizando o new, porém gostaria de saber dos programadores mais experientes do que eu aqui no forum qual desses é melhor pra se trabalhar em C++ (calloc, malloc ou new) e o que muda no desempenho de um para o outro.

 

abaixo segue o codigo que eu fiz, para aplicação do estudo de ponteiros.

#include <iostream>
#include <new>

using namespace std;



/*Função para calcular a media aritmetica simples das notas contidas
em um vetor de tamanho passado pelo usuario
*/
float meida (float *vetor, int n)
{
	
	float media_notas = 0;
	for (int i = 0; i < n; i++)
	{
		media_notas += vetor[i];
	}
	return media_notas;
}

/*
programa que solicita um numero 'n' e entao cria um vetor de n notas e calcula
a media aritimetica das notas
*/

int main()
{
	
	int tamanho = 0;
	float *notas = NULL;
	
		cout <<" Informe a quantidade de notas"<<endl;
			cin >>tamanho;
		notas = new float[tamanho];
			 	
					cout <<" Entre com as notas"<<endl;
			   
			   	   	   for (int i = 0; i < tamanho; i++)
  	   	   	   	   	   {
			   				cout <<i+1<<"ª Nota"<<endl;
			   					cin >>notas[i];
                       }
			 	  
				   	
 
 cout << meida(notas,tamanho);
//Deleta o vetor e libera a memoria alocada por ele.		
delete []notas;	
	
	
	return 0;
}

Desde ja agradeço pelo esclarecimento!!!

Compartilhar este post


Link para o post
Compartilhar em outros sites

C++ é uma linguagem de programação OO, então new e delete são os recomendados, pois executam o construtor e destrutor respectivamente da classe do objeto.

 

malloc() e free() pertencem a linguagem C e não tem as mesmas propriedades de new e delete do C++.

  • Curtir 1
  • Obrigado 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

@isrnick É bom frisar que quando se usa o new em C++ para criar um novo objeto, o mesmo fica alocado na região da memória chamada de Heap, e fica de responsabilidade do programador liberar essa memória alocada com o comando delete

Em C++ não tem um "Garbage Collector", como em Java, responsável por esse trabalho 😉

  • Curtir 1
  • Obrigado 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

@Lucas.San.tana Sim. Essa memória continua alocada, e o pior é q não teremos mais como acessar essa região de memória pois o ponteiro q aponta para essa região é destruído ao final da execução do programa

Para mais detalhes a respeito disso recomendo esse link:

Programar em C++/Alocação dinâmica de memória

  • Obrigado 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

@Lucas.San.tana Em sistemas operacionais atuais (Windows, Linux, iOS) toda a memória que foi alocada para o programa, mesmo a memória alocada dinamicamente, é liberada pelo SO quando o programa é encerrado.

 

Mas um programa feito para um sistema sem um SO robusto, como um sistema embarcado ou algo do tipo, pode não ter essa facilidade e a memória continuaria alocada se o programa não a liberou antes de ser finalizado.

 

Em todo caso é melhor garantir que existe um delete correspondente a new utilizado, mesmo se o programa vai ser encerrado logo em seguida, pois se você criar o habito de fazer isso em qualquer situação vai evitar situações em que esquece de usar o delete causando vazamento de memória (memory leak) durante a execução do programa, fazendo-o usar memória excessiva, e causando problemas. E esse é o tipo de problema que pode ser bem difícil descobrir posteriormente em que lugar ocorre no código.

  • Curtir 3

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tive a mesma discussão nesse outro tópico, e até postei uns links como referência lá também.

 

 

  • Curtir 2

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora





Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×