delorie.com/archives/browse.cgi   search  
Mail Archives: djgpp/1997/10/14/14:58:08

Message-Id: <m0xL61M-000S1mC@inti.gov.ar>
Comments: Authenticated sender is <salvador AT natacha DOT inti DOT gov DOT ar>
From: "Salvador Eduardo Tropea (SET)" <salvador AT inti DOT edu DOT ar>
Organization: INTI
To: djgpp AT delorie DOT com
Date: Tue, 14 Oct 1997 15:40:20 +0000
MIME-Version: 1.0
Subject: GCC uses A LOT of memory to parse static arrays
CC: Eli Zaretskii <eliz AT is DOT elta DOT co DOT il>

  Last week Eli didn't beleave me that GCC uses huges amounts of memory for
arrays making impossible the generation of a 300Kb .o file with 40Mb of
memory. He asked for exact values, here are:

Data type: unsigned chars
Size of the array: 182,520 bytes
Data memory used by GCC (2.7.2.1): 37,306,480
.o file generated: 182,895 bytes

  So the rest of arrays I need for the font (that's the content of the array)
doesn't feet in 40Mb.
  I think that's too bad. But is even WORST, you can think: "SET is using a
special array that consumes too much memory because of some particularity".
Well the situation is the reverse! Using this code to generate the array:

#include <stdio.h>

int main(int argc, char *argv[])
{
 int i;
 printf("unsigned char x[]={\n");
 for (i=0; i<182520; i++)
    {
     printf("%d",i % 256);
     if (i!=182519)
        printf(",");
     if ((i % 20)==19)
        printf("\n");
    }
 printf("};\n");
 return 0;
}

I got "out of virtual"!!!!!, perhaps that isn't very important because you
don't know what go32-v2 reports in my machine:

DPMI memory available: 27435 Kb
DPMI swap space available: 130389 Kb

So 128Mb is not enough!!
I then tried this program to generate the array:

#include <stdio.h>

int main(int argc, char *argv[])
{
 int i;
 printf("unsigned char x[]={\n");
 for (i=0; i<182520; i++)
    {
     printf("%d",i % 2);
     if (i!=182519)
        printf(",");
     if ((i % 20)==19)
        printf("\n");
    }
 printf("};\n");
 return 0;
}

And it consumed 37Mb as the fonts. Seems that here there are some exponential
use of memory.
The conclution is very easy: NEVER use GCC for large static arrays, use AS.

SET
------------------------------------ 0 --------------------------------
Visit my home page: http://www.geocities.com/SiliconValley/Vista/6552/
Salvador Eduardo Tropea (SET). (Electronics Engineer)
Alternative e-mail: set-sot AT usa DOT net - ICQ: 2951574
Address: Curapaligue 2124, Caseros, 3 de Febrero
Buenos Aires, (1678), ARGENTINA
TE: +(541) 759 0013

- Raw text -


  webmaster     delorie software   privacy  
  Copyright 2019   by DJ Delorie     Updated Jul 2019