Autor
|
Tema: Problema con el tamaño de una estructura y/o cadena en Dev-C++ (Leído 3,460 veces)
|
BlerofonT
Desconectado
Mensajes: 16
|
Buenas a tod@s!!! Mi problema es que he hecho un programa en el cual modifico las siguientes estructuras: struct Producto{ int codigo; char nombre[N];/*N=50*/ float precio; int stock; };
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!!!
|
|
|
En línea
|
|
|
|
do-while
Desconectado
Mensajes: 1.276
¿Habra que sacarla de paseo?
|
¡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
Mensajes: 16
|
¡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
Mensajes: 16
|
do-while tenia razon, aki dejo el enlace: http://c.conclase.net/curso/index.php?cap=011b#STR_sizeofaunke 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
Mensajes: 17
|
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
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
almacenar estructura en cadena en .NET
.NET (C#, VB.NET, ASP)
|
andaluz
|
0
|
1,689
|
26 Octubre 2011, 17:48 pm
por andaluz
|
|
|
Tamaño bytes para una estructura
Programación C/C++
|
abreu20011
|
4
|
3,053
|
11 Agosto 2012, 01:35 am
por BlackZeroX
|
|
|
Problema con cadena de caracteres y estructura (Novato)
Programación C/C++
|
alejandrodiaz
|
3
|
1,626
|
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,178
|
8 Junio 2016, 00:24 am
por geeke
|
|
|
Optimizar tamaño de estructura de Datos
« 1 2 »
Programación C/C++
|
AlbertoBSD
|
11
|
5,160
|
23 Julio 2016, 16:18 pm
por AlbertoBSD
|
|