Re: macro for fir list?

Liste des GroupesRevenir à cl c 
Sujet : Re: macro for fir list?
De : fir (at) *nospam* grunge.pl (fir)
Groupes : comp.lang.c
Date : 30. Mar 2024, 15:08:03
Autres entêtes
Organisation : i2pn2 (i2pn.org)
Message-ID : <uu92rd$3heoj$1@i2pn2.org>
References : 1 2 3 4 5 6 7
User-Agent : Mozilla/5.0 (Windows NT 5.1; rv:27.0) Gecko/20100101 Firefox/27.0 SeaMonkey/2.24
bart wrote:
On 30/03/2024 09:56, fir wrote:
>
>
yet other example
>
//bytes container
   char* bytes = NULL; int bytes_size = 0;
   void bytes_add(char val) {
(bytes=(char*)realloc(bytes,++bytes_size*sizeof(char)))[bytes_size-1]=val;
 }
   void bytes_load(char* name)  {    FILE *f = fopen(name, "rb"); int
c; while((c=getc(f))!=EOF) bytes_add(c);   fclose(f);  }
>
This is pretty inefficient. Loading an 8MB file this way takes 3
seconds, vs. 50ms to load it in one go.
>
Loading the same 90KB file 10,000 times took 120 seconds, vs. 0.8
seconds even using a scripting language.
>
80% of the inefficiency is growing the buffer one byte at a time. The
other 20% is reading the file one byte at a time.
>
>
i know its inneficient but that was not the point - the point was  more about composition and utility
i may revrite but the example would be much longer
   char* bytes = NULL; int bytes_size = 0;
   char* bytes_resize(char size) {return bytes=(char*)realloc(bytes,(bytes_size=size)*sizeof(char));  }
   void bytes_add(char val) { (bytes=(char*)realloc(bytes,++bytes_size*sizeof(char)))[bytes_size-1]=val;   }
   void bytes_save(char* name)  {    FILE* f =fopen(name, "wb"); int saved = fwrite (bytes , 1, bytes_size, f); fclose (f);  }
  int GetFileSize2(char *filename)
  {
     struct stat st;
     if (stat(filename, &st)==0) return (int) st.st_size;
//    ERROR_EXIT("error obtaining file size for &s", filename);
     return -1;
  }
   void bytes_load(char* name)
   {
     int flen = GetFileSize2(name);
     FILE *f = fopen(name, "rb");
     int loaded = fread(bytes_resize(flen), 1, flen, f);
     fclose(f);
    }
generally if some uses this bytes microcintainer (i call it also list, though it is also resizable array) one may use thie add method which callst reallock or call resize(1000) and use it by bytes[i] so its not
inefficient
//@include "bytes.c"
for(int i=0;i<1000;i++) bytes_add(rand()&0xff);
bytes_resize(1000);
for(int i=0;i<1000;i++) bytes[i]=rand()&0xff;

Date Sujet#  Auteur
28 Mar 24 * macro for fir list?20fir
28 Mar 24 +* Re: macro for fir list?4fir
28 Mar 24 i`* Re: macro for fir list?3fir
28 Mar 24 i `* Re: macro for fir list?2fir
29 Mar 24 i  `- Re: macro for fir list?1fir
30 Mar 24 `* Re: macro for fir list?15Opus
30 Mar 24  `* Re: macro for fir list?14fir
30 Mar 24   +- Re: macro for fir list?1fir
30 Mar 24   `* Re: macro for fir list?12fir
30 Mar 24    `* Re: macro for fir list?11fir
30 Mar 24     +* Re: macro for fir list?9fir
30 Mar 24     i`* Re: macro for fir list?8bart
30 Mar 24     i +* Re: macro for fir list?6fir
30 Mar 24     i i`* Re: macro for fir list?5fir
30 Mar 24     i i `* Re: macro for fir list?4fir
30 Mar 24     i i  +- Re: macro for fir list?1fir
30 Mar 24     i i  +- Re: macro for fir list?1fir
30 Mar 24     i i  `- Re: macro for fir list?1fir
30 Mar 24     i `- Re: macro for fir list?1fir
30 Mar 24     `- Re: macro for fir list?1fir

Haut de la page

Les messages affichés proviennent d'usenet.

NewsPortal