Autor Tema: Artículo: Memoria y punteros  (Leído 8386 veces)

Desconectado Physlet

  • PHPero Experto
  • *****
  • Mensajes: 822
  • Karma: 41
  • Sexo: Masculino
  • Todo es posible con esfuerzo, dedicación e interés
    • Ver Perfil
    • PanamaDev
Re:Artículo: Punteros
« Respuesta #15 en: 22 de Marzo de 2011, 21:17:39 pm »
Si haces sizeof(long int) y eso devuelve 8 quiere decir que ocupa 8 unidades de char, normalmente 8 bytes.
Es decir, que sí, ocuparía 8 posiciones de memoria distintas. Todas ellas consecutivas. En total serían 8posiciones*8 bits = 64 bits.
Con esos 64 bits podrías representar 2^64 numeros diferentes. En complemento a dos (signed) el número mas pequeño que puedes representar sería el -((2^64)/2) y el número mas alto el ((2^64)/2)-1.
En binario clasico (unsigned) el numero mas alto sería el (2^64)-1 y el numero mas pequeño el 0.
O sea que la diferencia entre usar un signed y unsigned es la cantidad de números positivos que puedes utilizar, porque en memoria ocupará lo mismo.

He ahí el por qué hay que declarar las variables de acuerdo a lo que queremos trabajar, porque no tiene sentido que si vamos a trabajar con años, usemos int pudiendo utilizar short, que ocupa menos espacio en memoria.

Comunidad PHPeros

Re:Artículo: Punteros
« Respuesta #15 en: 22 de Marzo de 2011, 21:17:39 pm »

Desconectado CarlosRdrz

  • Moderador Global
  • PHPero Master
  • *****
  • Mensajes: 2.505
  • Karma: 131
  • Sexo: Masculino
  • A.k.a. TLX
    • Ver Perfil
Re:Artículo: Punteros
« Respuesta #16 en: 23 de Marzo de 2011, 00:24:32 am »
O sea que la diferencia entre usar un signed y unsigned es la cantidad de números positivos que puedes utilizar, porque en memoria ocupará lo mismo.

He ahí el por qué hay que declarar las variables de acuerdo a lo que queremos trabajar, porque no tiene sentido que si vamos a trabajar con años, usemos int pudiendo utilizar short, que ocupa menos espacio en memoria.

Eso es.

La diferencia entre signed y unsigned es que el unsigned no almacena numeros negativos pero ganamos mas numeros positivos!
Solo marca la diferencia entre codificar en complemento a dos o en binario clásico!

Y si! Por supuesto. ¿Para que usar int cuando con short int tenemos de sobra? Aunque de todas formas, la diferencia es casi ínfima, por eso muy poca gente se molesta en hacerlo.
Cuando un programa ocupa 200 MB de memoria, un byte mas o un byte menos no marca la diferencia, aunque es una buena practica hacerlo.

Además de para ocupar menos memoria, hay otra utilidad de usar tipos mas cortos, y es que te limita mucho los numeros.
En un unsigned short int tenemos 2 bytes, que son 16 bits, osea (2^16)-1 es el numero mas alto posible, que es el 65535.
Si a este número le sumamos 1, lo que nos da es 0. Esto es debido a que 1111 1111 1111 1111+ 1 = 1 0000 0000 0000 0000, pero si solo tenemos 16 bits entonces el bit mas significativo se desprecia (el bit numero 17) y nos quedamos con los otros 16 bits, que representan al numero cero.

Por lo tanto, si queremos un intervalo de números que vaya desde el 0 hasta el 65535 (por ejemplo para un puerto), si usamos unsigned short int nos olvidamos de comprobar que el numero en esa variable es valido, porque siempre va a estar en el intervalo [0, 65535]. Es decir, que si queremos un intervalo [0, 65535] un unsigned short int nos garantiza que el numero que este almacenado ahí va a estar en ese intervalo (no tiene mas remedio) mientras que si usamos un int tendremos que usar un if para comprobar que el numero que almacenamos en esa variable esta dentro de esos limites, ya que el rango de números posibles es mucho mas amplio.

Saludos
La dedicación de mi respuesta sera directamente proporcional a la dedicación de tu pregunta.
Hacer códigos que entiendan las máquinas es fácil, lo difícil y realmente útil es hacer códigos que entiendan las personas.
http://twitter.com/CarlosRdrz
http://www.carlosrdrz.es

Desconectado Physlet

  • PHPero Experto
  • *****
  • Mensajes: 822
  • Karma: 41
  • Sexo: Masculino
  • Todo es posible con esfuerzo, dedicación e interés
    • Ver Perfil
    • PanamaDev
Re:Artículo: Punteros
« Respuesta #17 en: 23 de Marzo de 2011, 00:30:33 am »
Exactamente. En cuanto a programación hay muchas cosas que pueden resultar insignificantes, pero las cosas hay que hacerlas correctamente y de eso nos daremos cuenta cuando creemos sistemas pesados. Siempre hay que tener en cuenta optimizar las aplicaciones.

Desconectado CarlosRdrz

  • Moderador Global
  • PHPero Master
  • *****
  • Mensajes: 2.505
  • Karma: 131
  • Sexo: Masculino
  • A.k.a. TLX
    • Ver Perfil
Re:Artículo: Punteros
« Respuesta #18 en: 23 de Marzo de 2011, 00:40:35 am »
Exactamente. En cuanto a programación hay muchas cosas que pueden resultar insignificantes, pero las cosas hay que hacerlas correctamente y de eso nos daremos cuenta cuando creemos sistemas pesados. Siempre hay que tener en cuenta optimizar las aplicaciones.

Eso es una verdad :)

Saludos!
La dedicación de mi respuesta sera directamente proporcional a la dedicación de tu pregunta.
Hacer códigos que entiendan las máquinas es fácil, lo difícil y realmente útil es hacer códigos que entiendan las personas.
http://twitter.com/CarlosRdrz
http://www.carlosrdrz.es

Desconectado CarlosRdrz

  • Moderador Global
  • PHPero Master
  • *****
  • Mensajes: 2.505
  • Karma: 131
  • Sexo: Masculino
  • A.k.a. TLX
    • Ver Perfil
Re:Artículo: Punteros
« Respuesta #19 en: 23 de Marzo de 2011, 01:19:09 am »
Ahí va el tercer capítulo.
De momento voy a capítulo por noche, pero el índice lo voy cambiando de vez en cuando de acuerdo a lo que escribo.
Si tienen alguna duda o algo no se ha explicado bien por favor decidlo y así lo mejoraré!

Saludos =)
La dedicación de mi respuesta sera directamente proporcional a la dedicación de tu pregunta.
Hacer códigos que entiendan las máquinas es fácil, lo difícil y realmente útil es hacer códigos que entiendan las personas.
http://twitter.com/CarlosRdrz
http://www.carlosrdrz.es

Desconectado Physlet

  • PHPero Experto
  • *****
  • Mensajes: 822
  • Karma: 41
  • Sexo: Masculino
  • Todo es posible con esfuerzo, dedicación e interés
    • Ver Perfil
    • PanamaDev
Re:Artículo: Punteros
« Respuesta #20 en: 23 de Marzo de 2011, 02:01:17 am »
Otra corrección en el nuevo capítulo:
Citar
solo que en lugar de binario se expresa en hexadecimal porque es mas corto y mas fácil de leer para los humanos pero en la memoria ese numero se guarda en formato decimal binario, exactamente así: 10111111111100100011101011011111. Ya hemos dicho que en una maquina

Me acabas de acordar del operador &, que en PHP actua exactamente igual.

Desconectado CarlosRdrz

  • Moderador Global
  • PHPero Master
  • *****
  • Mensajes: 2.505
  • Karma: 131
  • Sexo: Masculino
  • A.k.a. TLX
    • Ver Perfil
Re:Artículo: Punteros
« Respuesta #21 en: 23 de Marzo de 2011, 11:06:20 am »
Otra corrección en el nuevo capítulo:
Me acabas de acordar del operador &, que en PHP actua exactamente igual.

Gracias por la corrección Physlet, entre tantos términos a veces se me va la olla jaja

Como dices, en PHP también existe el operador &, pero no existen los punteros como en C. Así que todo lo que estoy explicando no es aplicable a PHP.
Si queréis saber mas sobre & en PHP y por qué no se comporta como punteros: http://www.cristalab.com/tutoriales/variables-por-referencia-y-valor-en-php-c64201l/

Saludos!
La dedicación de mi respuesta sera directamente proporcional a la dedicación de tu pregunta.
Hacer códigos que entiendan las máquinas es fácil, lo difícil y realmente útil es hacer códigos que entiendan las personas.
http://twitter.com/CarlosRdrz
http://www.carlosrdrz.es

Desconectado Physlet

  • PHPero Experto
  • *****
  • Mensajes: 822
  • Karma: 41
  • Sexo: Masculino
  • Todo es posible con esfuerzo, dedicación e interés
    • Ver Perfil
    • PanamaDev
Re:Artículo: Punteros
« Respuesta #22 en: 23 de Marzo de 2011, 16:55:33 pm »
Gracias por la corrección Physlet, entre tantos términos a veces se me va la olla jaja

Como dices, en PHP también existe el operador &, pero no existen los punteros como en C. Así que todo lo que estoy explicando no es aplicable a PHP.
Si queréis saber mas sobre & en PHP y por qué no se comporta como punteros: http://www.cristalab.com/tutoriales/variables-por-referencia-y-valor-en-php-c64201l/

Saludos!
Me refería a que se usaba de la misma forma, referenciar una variable por su dirección en memoria (se entiende así, aunque no sea realmente así). O sea, que si yo hago:

$hola = "hey";
y luego:
$adios = &$hola;

La variable $adios siempre mantendrá el valor que posee $hola. Si más adelante yo pongo: $hola = "3"; ahora $adios implicitamente también valdrá "3".

Desconectado -Pituko-

  • PHPero Experto
  • *****
  • Mensajes: 954
  • Karma: 20
  • Sexo: Masculino
  • ¡Hala Madrid!
    • Ver Perfil
Re:Artículo: Punteros
« Respuesta #23 en: 24 de Marzo de 2011, 00:14:02 am »
Me encantaron las partes que has presentado, programo en lenguajes basados en C, y he programado una que otra vez en C++ por lo que me gusta este tema.
PD: Se te fue un punto en la sección 0:
Cita de: TLX
Cuando nos referimos a "arquitectura" nos estamos refiriendo al tipo de compu.tador principalmente, en particular al procesador y a cómo lee la memoria
« Última modificación: 24 de Marzo de 2011, 00:19:30 am por -Pituko- »

Desconectado Physlet

  • PHPero Experto
  • *****
  • Mensajes: 822
  • Karma: 41
  • Sexo: Masculino
  • Todo es posible con esfuerzo, dedicación e interés
    • Ver Perfil
    • PanamaDev
Re:Artículo: Punteros
« Respuesta #24 en: 24 de Marzo de 2011, 00:30:56 am »
Me encantaron las partes que has presentado, programo en lenguajes basados en C, y he programado una que otra vez en C++ por lo que me gusta este tema.
PD: Se te fue un punto en la sección 0:
No, lo puso a propósito porque sino salen los asteriscos de censura.
com*****dor

Desconectado CarlosRdrz

  • Moderador Global
  • PHPero Master
  • *****
  • Mensajes: 2.505
  • Karma: 131
  • Sexo: Masculino
  • A.k.a. TLX
    • Ver Perfil
Re:Artículo: Punteros
« Respuesta #25 en: 24 de Marzo de 2011, 13:27:57 pm »
Exacto, es por la censura :)

Subido el capitulo 3.

Saludos! =)
La dedicación de mi respuesta sera directamente proporcional a la dedicación de tu pregunta.
Hacer códigos que entiendan las máquinas es fácil, lo difícil y realmente útil es hacer códigos que entiendan las personas.
http://twitter.com/CarlosRdrz
http://www.carlosrdrz.es

Desconectado Physlet

  • PHPero Experto
  • *****
  • Mensajes: 822
  • Karma: 41
  • Sexo: Masculino
  • Todo es posible con esfuerzo, dedicación e interés
    • Ver Perfil
    • PanamaDev
Re:Artículo: Punteros
« Respuesta #26 en: 24 de Marzo de 2011, 18:11:57 pm »
Ok veamos si lo comprendí.
Supongamos que tenemos estos 8 bytes, cada guión es un byte distinto y las posiciones de memoria son 1, 2, 3... consecutivamente:

Código: [Seleccionar]
| - - - - - - - - |
Ahora yo quiero declarar un entero. Este se asigna en la dirección de memoria 4 y se interpreta que ocupa 4 bytes hacia atrás a partir de esa dirección, ¿o me equivoco?...

Código: [Seleccionar]
| - - - - | - - - - |
   [int]

Es decir, si yo miro el puntero de esa variable que he declarado, ¿me diría que está en la posición 4, pero también ocupa la 3, 2 y 1 porque son 4 bytes?

Desconectado CarlosRdrz

  • Moderador Global
  • PHPero Master
  • *****
  • Mensajes: 2.505
  • Karma: 131
  • Sexo: Masculino
  • A.k.a. TLX
    • Ver Perfil
Re:Artículo: Punteros
« Respuesta #27 en: 24 de Marzo de 2011, 19:23:36 pm »
No, realmente si tienes un int y su puntero esta en la dirección 4, ese int ocupara las direcciones 4, 5, 6 y 7.

Saludos!
La dedicación de mi respuesta sera directamente proporcional a la dedicación de tu pregunta.
Hacer códigos que entiendan las máquinas es fácil, lo difícil y realmente útil es hacer códigos que entiendan las personas.
http://twitter.com/CarlosRdrz
http://www.carlosrdrz.es

Desconectado CarlosRdrz

  • Moderador Global
  • PHPero Master
  • *****
  • Mensajes: 2.505
  • Karma: 131
  • Sexo: Masculino
  • A.k.a. TLX
    • Ver Perfil
Re:Artículo: Punteros
« Respuesta #28 en: 28 de Marzo de 2011, 00:48:30 am »
Ahí esta la parte numero 4, transformación de punteros.

Realmente si tienen alguna duda o algo no se entiende bien me gustaría que me lo comunicaran.

Saludos
La dedicación de mi respuesta sera directamente proporcional a la dedicación de tu pregunta.
Hacer códigos que entiendan las máquinas es fácil, lo difícil y realmente útil es hacer códigos que entiendan las personas.
http://twitter.com/CarlosRdrz
http://www.carlosrdrz.es

Desconectado CarlosRdrz

  • Moderador Global
  • PHPero Master
  • *****
  • Mensajes: 2.505
  • Karma: 131
  • Sexo: Masculino
  • A.k.a. TLX
    • Ver Perfil
Re:Artículo: Memoria y punteros
« Respuesta #29 en: 18 de Abril de 2011, 02:04:32 am »
Doy por concluido el pequeño artículo!
He eliminado las dos ultimas secciones porque tampoco se me ocurría que escribir en ellas, no se me ocurre demasiado que explicar sobre el tema de seguridad y uso, aunque la utilidad creo que se ha ido explicando poco a poco en cada capítulo.
Si se me ocurre algo modificaré el último post para añadir cosas :)

Saludos
La dedicación de mi respuesta sera directamente proporcional a la dedicación de tu pregunta.
Hacer códigos que entiendan las máquinas es fácil, lo difícil y realmente útil es hacer códigos que entiendan las personas.
http://twitter.com/CarlosRdrz
http://www.carlosrdrz.es