elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Guía rápida para descarga de herramientas gratuitas de seguridad y desinfección


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Problema con el tamaño de una estructura y/o cadena en Dev-C++
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Problema con el tamaño de una estructura y/o cadena en Dev-C++  (Leído 3,500 veces)
BlerofonT

Desconectado Desconectado

Mensajes: 16


Ver Perfil
Problema con el tamaño de una estructura y/o cadena en Dev-C++
« en: 8 Junio 2012, 14:29 pm »

Buenas a tod@s!!!

Mi problema es que he hecho un programa en el cual modifico las siguientes estructuras:

Código
  1. struct Producto{
  2.       int codigo;
  3.       char nombre[N];/*N=50*/
  4.       float precio;
  5.       int stock;
  6.       };
  7.  

y cuando hago el Dev-C++ un sizeof(struct Producto) me dice que ocupa 64bytes, pero si hacemos el calculo: 4 de int + 50 de char +4 float(en mi makina el tamaño de float es 4) + 4 de int =62!!!!
En cambio en Borland si que el sizeof(struct Producto) = 62.

¿Alguien sabe porke Dev-C++ me cuenta 2 bytes de mas?(creo que estos dos bytes son debidos a la cadena de 50 caracteres, ya que al leer la estructura de un fichero, el puntero avanza por el fichero: 4+50+2+4+4 y ademas cree una estructura con solo un int y un float y el sizeof(struct Producto)=8, como debe de ser )

Espero vuestras respuestas!!! :D


En línea

do-while


Desconectado Desconectado

Mensajes: 1.276


¿Habra que sacarla de paseo?


Ver Perfil
Re: Problema con el tamaño de una estructura y/o cadena en Dev-C++
« Respuesta #1 en: 8 Junio 2012, 15:37 pm »

¡Buenas!

Supongo que sera por la alineacion de los datos en memoria. Esto quiere decir, que cuando el compilador crea tu tipo de dato, no siempre el tamaño final sera la suma de los tamaños de los datos que contiene, ya que, por ejemplo, por cuestiones de eficiencia a la hora de acceder a la informacion, puede resultar mas facil acceder a unas posiciones de memoria que a otras. En este caso, si te das cuenta, esos 50 caracteres, que equivalen a 50 bytes, no son multiplo de 4, y por lo que comentas, te lo redondea por arriba a un multiplo de 4 (que es el tamaño de un DWORD)...

La verdad es que la respuesta la he dado por intuicion, si es errornea o alguien tiene una respuesta mas exacta, me gustaria conocerla.

¡Saludos!


En línea

- Doctor, confundo los números y los colores.
- Vaya marrón.
- ¿Marrón? ¡Por el culo te la hinco!
BlerofonT

Desconectado Desconectado

Mensajes: 16


Ver Perfil
Re: Problema con el tamaño de una estructura y/o cadena en Dev-C++
« Respuesta #2 en: 8 Junio 2012, 17:00 pm »

¡Buenas!

Supongo que sera por la alineacion de los datos en memoria. Esto quiere decir, que cuando el compilador crea tu tipo de dato, no siempre el tamaño final sera la suma de los tamaños de los datos que contiene, ya que, por ejemplo, por cuestiones de eficiencia a la hora de acceder a la informacion, puede resultar mas facil acceder a unas posiciones de memoria que a otras. En este caso, si te das cuenta, esos 50 caracteres, que equivalen a 50 bytes, no son multiplo de 4, y por lo que comentas, te lo redondea por arriba a un multiplo de 4 (que es el tamaño de un DWORD)...

La verdad es que la respuesta la he dado por intuicion, si es errornea o alguien tiene una respuesta mas exacta, me gustaria conocerla.

¡Saludos!

Pues efectivamente tienes razon en lo de multiplo de 4, ya que cambie la N por 48 y me dice que el tamaño de la estructura es 60, y despues escribi N=49, 50, 51 y 52 y me decia que el tamaño era 64, y escribi N=53 y el tamaño era 68. Pero, ¿esto no es un coñazo si quiero usar mi codigo en otras IDE o con otros compiladores? Porque si escribo mi mismo codigo en Borland no funciona ya que en la lectura del ficheroen Dec-C++, al acceder al elemento float de mi estructura tenia q sumarle el 2 famoso que dije antes, y en Borland no hace falta y por eso mi programa no funcionaba bien... :(
En línea

BlerofonT

Desconectado Desconectado

Mensajes: 16


Ver Perfil
Re: Problema con el tamaño de una estructura y/o cadena en Dev-C++
« Respuesta #3 en: 8 Junio 2012, 21:31 pm »

do-while tenia razon, aki dejo el enlace:

http://c.conclase.net/curso/index.php?cap=011b#STR_sizeof

aunke me sigue pareciendo un coñazo que Dev-C++(ya que segun este link no dicen q otros programas lo hagan) haga esto, ya que si quiero luego usar mi codigo en otro programa como Borland me compila bien pero no funciona... (aunke mejore el rendimeinto del procesador). Supongo que si siempre usas el mismo IDE tiene la ventaja de mejorar el rendimiento, pero bueno... :(
En línea

eduu15

Desconectado Desconectado

Mensajes: 17


Ver Perfil
Re: Problema con el tamaño de una estructura y/o cadena en Dev-C++
« Respuesta #4 en: 8 Abril 2018, 10:52 am »

Yo uso codeblocks y tambien lo hace, creo que lo hacen todos.
Llego 6 años despues a la respuesta pero bueno...
« Última modificación: 8 Abril 2018, 10:55 am por eduu15 » En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
almacenar estructura en cadena en .NET
.NET (C#, VB.NET, ASP)
andaluz 0 1,697 Último mensaje 26 Octubre 2011, 17:48 pm
por andaluz
Tamaño bytes para una estructura
Programación C/C++
abreu20011 4 3,081 Último mensaje 11 Agosto 2012, 01:35 am
por BlackZeroX
Problema con cadena de caracteres y estructura (Novato)
Programación C/C++
alejandrodiaz 3 1,656 Último mensaje 18 Enero 2016, 00:25 am
por lfgmespino
Tamaño de estructura varia con el orden de sus miembros
Programación C/C++
SebaC 2 2,201 Último mensaje 8 Junio 2016, 00:24 am
por geeke
Optimizar tamaño de estructura de Datos « 1 2 »
Programación C/C++
AlbertoBSD 11 5,236 Último mensaje 23 Julio 2016, 16:18 pm
por AlbertoBSD
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines