Función Alloca 3 C

Función Alloca 3 C
El espacio que se libera periódicamente se asigna con el comando ALLOCA. El marco de la pila de la persona que llama se asigna los bytes de longitud de la memoria por el método Alloca (). Una vez que el código que invocó Alloca () ha vuelto a su persona que llama, esta memoria intermedia se libera inmediatamente. Dentro de esta guía, discutiremos el uso de Alloca () para asignar el espacio de memoria a una variable sin liberarnos al final:
  • #incluir
  • void *alloca (size_t tamaño);

Valor de retorno

El método Alloca () devuelve una referencia al punto de partida de la región asignada. El script se comporta de manera indefinible si la asignación da como resultado un desbordamiento de pila.

Algunas confirmaciones

Posix.1-2001 no proporciona este método. Se sabe que el método Alloca () está presente en 32V, 3BSD, PWB, PWB.2 y 4BSD. Está documentado en 4.Página web manual de 3BSD. La variante GNU es utilizada por Linux.

Explicación

La función Alloca () depende del programa de compilación, así como del sistema de destino. Cuando se contrasta con el uso de Malloc (3) más gratis, el uso puede hacerlo más eficiente en algunos escenarios (3). En algunas circunstancias, también puede facilitar la distribución espacial en programas que emplean a LongJMP (3) o SiglongJMP (3) (3). Sin embargo, no se le indica que lo consuma.

Supongamos que la memoria asignada por Alloca () está reservada dentro del marco de la pila. Si de alguna manera la devolución del método se omite mediante una llamada de función a LongJMP (3) o SiglongJMP, el almacenamiento se libera instantáneamente (3). Memoria gratuita (3) que Alloca () ha asignado no debe intentarse! Las llamadas alloca () a menudo se traducen utilizando un script en línea por GCC (1).

Insectos

Si el marco de la pila no se expande, parece que no hay un mensaje de falla. Aunque, si la aplicación intenta usar la memoria no asignada después de una colocación fallida, está calificado para obtener una señal SIGSEGV. Dado que esta memoria de pila asignada por Alloca () podría mostrar en la pila dentro del medio de la región para los parámetros del método en varias plataformas, Alloca () no debe usarse dentro de la lista de parámetros de una llamada de método.

Ejemplo 01

Comencemos con nuestros primeros ejemplos de uso de la función Alloca () de C. Primero, necesitamos crear un archivo C utilizando la instrucción táctil dentro del directorio de trabajo actual del sistema Kali Linux. Después de eso, puede intentar abrirlo dentro de cualquier editor de su elección para agregar un script C dentro de él. Estamos utilizando el editor VIM para abrir el "Allocex.archivo c ".


Dentro del archivo vacío, hemos agregado el siguiente código. Este código comenzó con el "stdio.encabezado h ”para utilizar la secuencia de entrada y salida estándar en el programa. El "Alloca.El encabezado H "se ha utilizado para hacer uso de la función Alloc () C en este código. Este código contiene una sola función main () que ha estado inicializando una variable entera llamada "número" asignada con la memoria del tamaño 4.

El bucle "para" se ha inicializado y utilizado para incrementar el valor del "número" variable por 1 en cada índice. El siguiente bucle "para" se ha utilizado para mostrar cada valor de índice del número variable utilizando la instrucción de función printf (). Este código se ha completado aquí. Lo hemos guardado y está listo para la compilación.


Ahora, hemos estado compilando este archivo C con el compilador GCC y creamos su archivo de objeto llamado "AlloCex.fuera "dentro del mismo directorio de trabajo, yo.mi., "obras".


Después de eso, ejecutamos el archivo de objeto recién hecho de este código dentro del "./" instrucción. La salida ha estado mostrando un total de 4 valores para la variable particular, i.mi., Asignación de memoria de tamaño 4 al número de variable.


Cambiemos el número de iteración dentro del bucle "para", yo.mi., Cambio de 4 a 5. El siguiente código se ha actualizado. Guardémoslo antes de compilarlo.


Hemos compilado el código modificado con el compilador GCC para anular su archivo de objeto también.


En la ejecución, tenemos la falla de segmentación. Es porque hemos estado inicializando el tamaño de la variable a 5 y usando el "<” sign to iterate the variable “Number” up to 5 which are a total of 6 memory locations, i.e., should be a total of 5.

Ejemplo 02

Tomemos otro ejemplo para asignar la memoria liberada periódicamente a la pila del puntero. Hemos estado usando los mismos encabezados con la adición del "stdlib.encabezado. El método Main () se ha establecido con la declaración de algunas variables y un puntero. Las declaraciones PrintF y ScanF se utilizan para mostrar y obtener el número de entrada del usuario, mientras que la función Alloca () asignará la memoria al "número" de la variable del puntero utilizando ese número particular agregado por un usuario. Si la memoria asignada a la variable "número es nula", yo.mi., Sin memoria asignada, entonces el printf () mostrará algún mensaje de error relacionado con él. Además, la función de salida (0) terminará este programa.

El bucle "para" está utilizando la función printf para mostrar el número de índice actual y le pide que ingrese el valor para un índice particular utilizando la función scanf. Independientemente del valor que haya agregado, se incrementará por el número de índice y se guardará en la variable "suma", la función printf () mostrará la "suma" de todas las iteraciones.


Lo hemos compilado y creado su archivo de objeto.


Ejecuté su archivo de objeto y ha estado pidiendo el tamaño de la asignación de memoria, yo.mi., 4. El usuario ha agregado un total de 4 valores y resumido por el programa y se muestra a continuación:

Conclusión

Se trata del uso de la función Alloca () para asignar el espacio de extracción a una variable particular, especialmente algunas pilas. Puede ver que no hemos usado la función "Free ()" para liberar el espacio asignado como lo hacemos generalmente en la función Malloc ().