Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

191
Vistas
¿Cuál es la diferencia entre un VLA y la asignación de memoria dinámica a través de malloc?

Tenía curiosidad con esto:

¿Cuál es la diferencia entre:

 const int MAX_BUF = 1000; char* Buffer = malloc(MAX_BUF);

y:

 char Buffer[MAX_BUF];
over 4 years ago · Santiago Trujillo
3 Respuestas
Responde la pregunta

0

  • Caso 1: En

     char Buffer[MAX_BUF];

    Buffer es una matriz de tamaño MAX_BUF . La técnica de asignación se llama VLA .

  • Caso 2: En

     const int MAX_BUF = 1000; char* Buffer = malloc(MAX_BUF);

    Buffer es un puntero al que se le asigna una memoria de tamaño MAX_BUF que es 1000 .

y, una matriz no es lo mismo que un puntero, y C-FAQ tiene una colección Muy buena que detalla las razones .

La principal diferencia, en términos de usabilidad y comportamiento son:

  1. (1) está en la pila, generalmente Nota , mientras que (2) está en el montón, siempre.
  2. (1) tiene un tamaño fijo una vez asignado, (2) se puede cambiar de tamaño.
  3. (1) se asigna cuando se llama a la función envolvente y tiene el alcance de bloque OTOH, (2) se asigna memoria dinámicamente, en tiempo de ejecución y la memoria devuelta tiene una duración que se extiende desde la asignación hasta la desasignación.
  4. (1) la memoria asignada no necesita ser administrada por el programador, mientras que en (2) toda la memoria malloc() d debe estar free() d. [ Cortesía: Jorge ]

Nota: Wiki

Por ejemplo, GNU C Compiler asigna memoria para VLA en la pila.

over 4 years ago · Santiago Trujillo Denunciar

0

Agregaré un poco de información en términos de administración de memoria, además de lo que otros dijeron.

1) La principal diferencia está aquí:

 const int MAX_BUF = 1000; char* Buffer = malloc(MAX_BUF);

Debe administrar la memoria asignada manualmente, por ejemplo, liberar el Buffer cuando termine de usarlo. Olvidarse de free (o liberarlo dos veces) puede ocasionar problemas.

2) Con el segundo caso:

 char Buffer[MAX_BUF];

No necesitas liberar nada. Se destruirá automáticamente. Por lo tanto, evita la tarea de manejar la memoria, lo cual es bueno. Debe intentar evaluar siempre qué enfoque necesita.

Algunos puntos.

  • Dado que el segundo se asigna en la pila, el primer enfoque también se toma cuando se necesita crear una matriz grande, ya que generalmente hay más memoria disponible en el montón.
  • Además, si crea una matriz utilizando el segundo enfoque, por ejemplo, en el método, la vida útil del objeto será ese método; no podrá usar esa matriz fuera de ese método. Mientras que con la asignación dinámica ese no es el caso.
over 4 years ago · Santiago Trujillo Denunciar

0

char* Buffer = malloc(MAX_BUF);

crea un Buffer de puntero char , asigna dinámicamente MAX_BUF bytes de memoria a través de malloc y hace que Buffer apunte al inicio del espacio asignado. Esta memoria se asigna en el montón.

 char Buffer[MAX_BUF];

crea un Buffer de matriz de tamaño MAX_BUF que puede contener un máximo de MAX_BUF caracteres. Tenga en cuenta que está creando una matriz de longitud variable (una característica introducida en C99 ) ya que MAX_BUF es una variable. Esta matriz se puede crear en la pila.

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda