Groups | Search | Server Info | Keyboard shortcuts | Login | Register


Groups > comp.os.linux.development.apps > #629

Re: memory use

From Bob Tennent <BobT@cs.queensu.ca>
Newsgroups comp.os.linux.development.apps
Subject Re: memory use
Date 2011-02-02 22:29 +0000
Organization albasani.net
Message-ID <slrnikjmlv.c8u.BobT@linus.cs.queensu.ca> (permalink)
References <slrnikj71n.9i7.BobT@linus.cs.queensu.ca> <iicc2g$h26$1@reader1.panix.com> <slrnikjf85.au4.BobT@linus.cs.queensu.ca> <iichj0$chf$1@reader1.panix.com>

Show all headers | View raw


On Wed, 2 Feb 2011 21:16:16 +0000 (UTC), Grant Edwards wrote:
 > On 2011-02-02, Bob Tennent <BobT@cs.queensu.ca> wrote:
 >>On Wed, 2 Feb 2011 19:42:08 +0000 (UTC), Grant Edwards wrote:
 >>> On 2011-02-02, Bob Tennent <BobT@cs.queensu.ca> wrote:
 >>>
 >>>> A C program called musixflx is used as the second pass of a
 >>>> three-pass TeX-based system called musixtex.  The program was the
 >>>> first C program written by a Fortran programmer.  It has definitions
 >>>> as follows:
 >>>>
 >>>>   # define MAX_BARS    2048  /* max number of bars */
 >>>>
 >>>>   int zbar[MAX_BARS], lr_repeat[MAX_BARS], raggedline[MAX_BARS],
 >>>>       l_repeat[MAX_BARS], barno[MAX_BARS], ...
 >>>>
 >>>>   double hardbarlength[MAX_BARS], softbarlength[MAX_BARS],
 >>>>          width_leftrightrepeat[MAX_BARS], width_leftrepeat[MAX_BARS],
 >>>>          ...
 >>>>
 >>>> Typically the number of bars in a piece is much smaller than MAX_BARS.
 >>>>
 >>>> Would it be best to
 >>>>
 >>>>  + leave the code alone and let the virtual-memory functions of the
 >>>>    operating system manage the memory
 >>>>
 >>>>  + use "extensible" arrays (i.e., use realloc to copy small arrays to
 >>>>    larger ones when necessary)
 >>>>
 >>>> And would there be any benefit to using a single array of structures
 >>>> instead of many parallel arrays?
 >>>
 >>> You're going to have to define "best" and "benefit" before anybody can
 >>> attempt to answer your question.  Is the current design causing some
 >>> sort of problem for you?  If so, what is that problem?
 >>
 >> Naively, it looks like the program uses a huge amount of memory
 >
 > Huge?
 >
 > The declarations you showed declare a total of 120KB of memory. That's
 > "KB" not "MB".  That's less than 0.01% of RAM on a machine that has 1GB.
 > What's your target enviroment like?

At one time MAX_BARS was bigger and was reduced because I think Turbo C
couldn't deal with it.

 >> and it's conceivable that extensible arrays would avoid this. But I
 >> suspect virtual memory will keep unused array space out of RAM.
 >
 > That depends on access patterns, but in general converting code like
 > that into an array of structs will provide more access locality and
 > better page utilization.  The existing code spreads the accesses out
 > over a more pages compared to an array of structs.
 >
 >> so there's no significant performance penalty in the existing code.  
 >>
 >> But even if the above is true, it may be that one big array of
 >> structs will have less overhead than many parallel arrays.
 >
 > The storage requirements will be the same.  What sort of overhead are
 > you concerned about?

Maintaining separate meta-data for separate arrays?

 > If the problem you're trying to solve is that the code is hard to read
 > and maintain, then go head and re-write it.  If you're worring about
 > reducing memory usage from 120K to 60K, then you're probably wasting
 > your time.
 >
 > OTOH, if the program has a RSS of hundreds of megabytes, then you've
 > gotsome thing to work on.  What does "top" tell you about the program
 > while it's running?

672K

Back to comp.os.linux.development.apps | Previous | Next | Find similar


Thread

Re: memory use Bob Tennent <BobT@cs.queensu.ca> - 2011-02-02 22:29 +0000

csiph-web