Autor
|
Tema: Como se representa un array en la pila (Leído 6,617 veces)
|
leucocito
Desconectado
Mensajes: 199
|
Hola que tal?
Antes de nada decir que en la pila se que se almacenan las variables locales de una función y la dirección de retorno,pero cuando en lenguage C creamos un array de 20 bytes de espacio (que reservamos) para una variable me gustaría saber eso como se representa en la pila.
El código en C seria este
#include <stdio.h>
int main (int argc, char **argv) { char buffer[64]; //Declaramos un array con 64 bytes de espacio if (argc < 2){ printf ("Introduzca un argumento al programa\n"); //Printeamos return 0; } strcpy (buffer, argv[1]);
return 0; }
El fin de de esta pregunta es entender un poco mas como funciona un desbordamiento en la pila (que se que consiste en introducir mas bytes en la pila de lo que una variable soporta de modo que sobrescribimos zonas en la que no tendríamos por que tener acceso entre ellas la dirección de retorno.
|
|
|
En línea
|
|
|
|
ShotgunLogic
Desconectado
Mensajes: 233
Claws so razor sharp
|
Si no me equivoco, en la pila solamente guardas un dato, que es la dirección de memoria en la que comienza el array. De esta manera las operaciones de llamadas a procedimientos lo que haces es operar con el dato en memoria. Es por eso que siempre se pasa por referencia el array, y cualquier cambio que hagas dentro de la función lo tendrá "fuera".
Bueno eso es cuando lo pasas, pero al crearlo dentro como dices tu pues lo hará a pelo, cogera el puntero de pila y reservará espacio en memoria correspondiente al tamaño del array. Y más en C/C++ que tienes que declararlo ya con su tamaño.
Saludos!
|
|
« Última modificación: 19 Mayo 2011, 09:52 am por ShotgunLogic »
|
En línea
|
The clans are marching against the law, bagpipers play the tunes of war, death or glory I will find, rebellion on my mind.
|
|
|
leucocito
Desconectado
Mensajes: 199
|
Entonces cuando reserbamos un espacio en un array en C lo que estamos haciendo es reserbar un espacio en la pila para nuestra variable?
|
|
|
En línea
|
|
|
|
Eternal Idol
Kernel coder
Moderador
Desconectado
Mensajes: 5.969
Israel nunca torturó niños, ni lo volverá a hacer.
|
Depende del ambito, en el caso del ejemplo si, cada uno de los bytes del array esta en la pila. En este caso estan en la sección de datos: #include <stdio.h> char buffer[64]; //Declaramos un array con 64 bytes de espacio int main (int argc, char **argv) { if (argc < 2){ printf ("Introduzca un argumento al programa\n"); //Printeamos return 0; } return 0; }
|
|
|
En línea
|
La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste. Juan Domingo Perón
|
|
|
ShotgunLogic
Desconectado
Mensajes: 233
Claws so razor sharp
|
Depende del ambito, en el caso del ejemplo si, cada uno de los bytes del array esta en la pila. En este caso estan en la sección de datos: #include <stdio.h> char buffer[64]; //Declaramos un array con 64 bytes de espacio int main (int argc, char **argv) { if (argc < 2){ printf ("Introduzca un argumento al programa\n"); //Printeamos return 0; } return 0; }
Lo que había comentado yo, en ese caso lo que haces es meter en la pila la dirección del array, y la pila, ayudandose de los registros, va a coger los elementos del array que estan en memoria, ya que un array siempre se pasa por referencia.
|
|
|
En línea
|
The clans are marching against the law, bagpipers play the tunes of war, death or glory I will find, rebellion on my mind.
|
|
|
leucocito
Desconectado
Mensajes: 199
|
Muchas gracias por las respuestas me ha quedado claro. un saludo y seguid asi!!!
|
|
|
En línea
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
Dim lista as new List(of Usuario)(n) ->Que representa n.¿?
.NET (C#, VB.NET, ASP)
|
Hadess_inf
|
1
|
4,252
|
16 Junio 2008, 23:25 pm
por MANULOMM
|
|
|
qué me representa public static List<.... > .....{ }
.NET (C#, VB.NET, ASP)
|
irvincnt93
|
1
|
3,295
|
20 Febrero 2015, 02:22 am
por Usuario Invitado
|
|
|
Problema con Pila (Stack), Hilos (Thread) y Lista números (Array)
Java
|
S_Code
|
1
|
2,680
|
27 Mayo 2016, 12:19 pm
por S_Code
|
|
|
¿En este Array de numeros enteros el 7 representa las filas y el 4 las columnas?
Programación C/C++
|
Quaternion
|
1
|
1,702
|
1 Marzo 2019, 12:40 pm
por K-YreX
|
|
|
Polémica en Francia por un cartel de los anti vacunas que representa a Macron como Hitler
« 1 2 »
Foro Libre
|
El_Andaluz
|
16
|
11,426
|
6 Agosto 2021, 11:12 am
por #!drvy
|
|