Aplicacion 32bits en maquina de 64

Rodrigo Javier Tobar Carrizo rtobar en alumnos.inf.utfsm.cl
Mar Abr 15 12:56:03 CLT 2008


andrade en theory.polytechnique.fr escribió:
> Hola,
> 
> On Tue, 15 Apr 2008, Rodrigo Javier Tobar Carrizo wrote:
> 
>> Hola a todos!
>>
>> Tengo un problema interesante... ojala alguien me pueda ayudar. El 
>> problema en cuestion es el siguiente:
>>
>> Maquina de 64 bits. Programa compilado con gcc -m32. Librerias de 32 
>> bits. Todo funciona OK hasta que aparece el nunca bien ponderado 
>> "Segmentation fault". En gdb tengo la siguiente informacion (entre 
>> otras cosas...):
>>
> 
> Alguna razon para compilar en 32 bits y no en 64? Si es un codigo 
> numerico, como parece, los registros extra de los 64 bits probablemente 
> ayudaran al rendimiento.

Si, es probable... pero el programa es grande, hay lectura y escritura 
de archivos, y muuuuuchas declaraciones. Entre tanta cosa, el cambio de 
que un long pese 4 bytes u 8 bytes afecta. Por eso quiero tratar de 
mantener el programa con 32 bits.

>> Program received signal SIGSEGV, Segmentation fault.
>> 0x080495cd in generate_new_population () at subgalaxyfinder.c:763
>> 763             GalA[numgal].BulgeMass         = 0.0;
>> (gdb)
>>
>> Es decir, se me cae en una asignacion, asi de simple. Si intento hacer 
>> una asignacion directamente con memcpy(3), tambien cae. strace no 
>> arroja nada peculiar. Si borro una instruccion o agrego otra, 
>> eventualmente se cae en alguna. El programa consume (es variable) a lo 
>> mas ~600 MB en RAM. En la maquina tengo 8 GB de RAM + 2 de swap.
> 
> Que te dice que es efectivamente un problema de los 32/64 bits? La 
> asignacion que estas haciendo accede un arreglo y luego un miembro de 
> una clase, esas cosas perfectamente pueden dar un segmentation fault 
> "legitimo" (un indice fuera del tama~no del arreglo).

Alvaro me pregunto lo mismo. Se me olvido resaltarlo en el primer 
mensaje, pero ambos (GalA como puntero, y numgal como indice) son 
valores legitimos.

> Intenta correr tu codigo dentro de valgrind (con la herramienta por 
> defecto: memcheck), eso te dara mas informacion de donde puede estar el 
> problema y si efectivamente tiene que ver con los 32 bits.

No se me habia ocurrido, lo voy a hacer a ver si es que sale algo 
interesante.

> Saludos,
> 
> Xavier

Saludos!
-- 
Rodrigo Tobar Carrizo   http://csrg.inf.utfsm.cl/~rtobar
CSAT Project Leader     +56 9 78073439
Linux User #399271


Más información sobre la lista de distribución Linux