C Preguntas de la entrevista y respuestas (página -4)

 

Asignación de puntero y dinámico de memoria (DMA)

 

41) Explicar el concepto de asignación de memoria dinámica (DMA)?

 

DMA representa asignación de memoria Dynamic , DMA nos permite asignar memoria en tiempo de ejecución.

 

asigna generalmente variables de la memoria en tiempo de compilación, por ejemplo int a; aquí, un asignará memoria en tiempo de compilación. Pero en case de asignación de memoria Dynamic, asigna memoria en tiempo de ejecución. Utilizando el concepto de DMA se puede asignar memoria exacta de las variables.

 

Aquí son las funciones que se utilizan para asignar o liberar la memoria en tiempo de ejecución:

 

malloc () : Para asignar memoria dinámica para una matriz unidimensional es decir, la asignación de memoria contigua.

 

calloc () : Para asignar memoria dinámica para dos es decir, asigna memoria de matriz dimensional en la fila y la columna manera.

 

realloc () : para volver a asignar memoria dinámica.

 

free () : Para liberar memoria asignada dinámicamente.

 

42) ¿Cuál es la diferencia entre static y dinámicos Asignaciones de memoria?

 

compilador asigna la memoria para la variable declarada en el momento del compilador, que se conoce como asignación de memoria en tiempo de compilación o asignación de memoria static .

 

Por ejemplo, if se declara una variable int num; la memoria para num será declarado en tiempo de compilación. Las variables que ocupan memoria estática se almacenan en la pila y el segmento de datos.

 

While de asignación de memoria Dynamic , asigna memoria en tiempo de ejecución. malloc () , calloc () y realloc () funciones se utilizan para la memoria declare de forma dinámica. De asignación de memoria dinámica se realiza en el segmento de pila.

 

43) ¿Cuál es la diferencia entre malloc () y calloc (), explique con la sintaxis / ejemplos?

 

malloc () y calloc () tanto asignar la memoria en el tiempo de ejecución (dinámico), estas funciones son muy útiles para la memoria dinámica asignada, cuando se trata de una gran cantidad de datos o desea crear memoria según su necesidad en tiempo de ejecución.

 

por ejemplo if desea crear la memoria para un número N de estudiantes a continuación, se necesitan estas funciones.

 

malloc () asigna la memoria en un solo bloque de acuerdo con el tamaño dado, while calloc () asigna en múltiples bloques de acuerdo con el tamaño dado.

 

	    int num=10;
  	    int *ptr;
  	    ptr=(int*)malloc(num*sizeof(int));

 

Aquí, malloc () asigna la memoria para 10 enteros y devuelve la dirección, que es cada tienda en ptr .

 

    int row=10,col=5;
  	    int *ptr;
  	    ptr=(int*)calloc(row,col*sizeof(int));

 

Aquí, calloc () asigna los bloques 10 (fila) de memoria de 20 bytes (5 * sizeof () y devuelve la dirección, que es cada tienda en ptr .

 

44) ¿Cuáles son el tipo return de malloc () y calloc (), ¿cómo podemos utilizar?

 

malloc () y calloc () ambas funciones return void * (un puntero void), con el uso / capturan el valor devuelto en la variable puntero convertimos su tipo.

 

Supongamos que creamos memoria para 10 enteros entonces tenemos que convertirlo en int * .

 

    int *ptr;
      ptr=(int*)malloc(N*sizeof(int));

Aquí, malloc () se return void variable de ptr * * y es int tipo, por lo que estamos convirtiendo en (int *).

45) ¿Cuál es pérdida de memoria en C?

 

Pérdida de memoria es realmente una situación de pánico, la insuficiencia de recursos de memoria / pérdidas de memoria se conocen como pérdidas de memoria. pérdida de memoria cuando el programa no gestiona la asignación de memoria correctamente.

 

Consideremos los siguientes ejemplos:

 

Ejemplo 1)

 

    char* myFunction()
      {
          char text[20];
          strcpy(text,"Hello, world!");
          return(test); 
      }
      //returned pointer points to text which has gone out of scope; 
      //it might cause a Segmentation fault.

 

Ejemplo 2)

 

    char *ptr = (char*)malloc(5*sizeof(char));
      free(ptr);
      ptr[1] = 'a'; 
      //invalid access through dangling pointer! 
      //It might cause a Segmentation fault.

 

46) ¿Cuál preprocesadores do?

 

Preprocesadores cambiar el código basado en directivas procesador pre aplicados como include #, # define .. etc, modifica el código antes de la compilación.

 

47) ¿Qué es una macro?

 

Macro es una directiva de preprocesador , que se utiliza para reemplazar los tokens / texto en el código en tiempo de compilación. Compilador reemplazará el nombre de una macro con su valor.

 

#define DEFAULT_CITY	"Mumbai"

 

DEFAULT_CITY macro será cambiado (sustituido) con “Mumbai” en el momento de la compilación.

 

48) ¿Cómo se puede evitar la inclusión de un archivo de cabecera varias veces?

 

Es un error común cuando se llama a un archivo de cabecera más de una vez el tiempo, el error se define la función / múltiples variables ocurrir, aquí es un ejemplo mediante el uso de esto se puede evitar la multiplicidad de inclusión código de tiempos.

 

#ifndef  _MY_HDR_H
  #define _MY_HDR_H
  	// code of the file
  	// code of the file
  #end if

 

if _MY_HDR_H no está definido, entonces se definirá y ejecutará el código de otro modo compilador evitará el código fuente escrito en #ifndef y #endif .

 

49) ¿Qué es el archivo y corrientes?

 

Un archivo es una colección de bytes que se almacenan en la memoria secundaria como disco duro, CD, Pen Drive (dispositivos de tipo de disco). Aquí colección de bytes representa que los datos que están almacenando en la memoria (en forma de bytes).

 

Hay dos tipos de archivos Los archivos de texto y archivos binarios .

 

Streams

 

Streams son secuencia de bytes de datos ; que puede ser en ambas direcciones. datos If se pasa al programa de, se llama flujo de entrada y datos if está regresando (impresión) para dispositivo de salida, se denomina flujo de salida .

 

50) ¿Cuál es ARCHIVO (puntero de archivo)?

 

ARCHIVO (mayúsculas) es una estructura, que se declara en stdio.h , un ARCHIVO * es un puntero de tipo ARCHIVO que se utiliza para almacenar la dirección de memoria de un archivo.

 

Ejemplo

 

    FILE *fp;	// declaration
      fp=fopen("ok.txt", "r");
      if(fp==NULL)
      {
          printf("nFile opening error!!!");
          exit(1);
      }
      printf("nFile opened successfully,");

 

Aquí, fopen está utilizando para abrir “ok.txt” archivo en modo de lectura. If archivo abierto satisfactoriamente, fopen devuelve la dirección de memoria de “ok.txt” archivo a fp , donde fp es un archivo * (archivo de puntero). If archivo no se abre correctamente, FOPEN vuelve NULL a fp .

 

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *