Paul Smith wrote:
On Thu, 2012-02-09 at 17:25 +0000, Tim Murphy wrote:
I also think that it can be expensive to append things onto very long
lists in make but that's just suspicion and I really need to take a
proper look at it instead of making accusations.
Appending is not very expensive.  Make doesn't know anything about
"lists" internally.  Everything in make is a string.  If you append to a
variable then make basically does a strlen() of the string, makes sure
there's enough memory for the new content in the buffer (or if not,
reallocs enough space), then strcat()'s the value.  Or the equivalent.
So I suppose yes, in some ways the longer the string the longer it takes
to do the strlen() but this should be very fast I'd expect.  Much of the
string manipulation in make (and make does a LOT of string manipulation)
is bog-stupid strlen, strcat, strcpy, strdup which gets expensive in
some situations.  I've considered implementing some kind of fancy string
encoding .
You've just described an O(n^2) behavior. This is definitely a drag; but it 
really depends on how heavily you make use of macros. In OpenLDAP 2.0 70% of 
our execution time was in libc; 35% in malloc/free and 35% in strlen/strcat 
and friends. I instituted a top-down replacement of all bare char *s in the 
code to struct bervals (char *ptr; int len) and eliminated all use of strlen 
in the code and our code base was immediately 60% faster. A number of other 
profiling and optimization exercises made OpenLDAP 2.1 *20* times faster than 
OpenLDAP 2.0, but getting rid of moronic uses of libc was the number 1 priority.
The thing that DOES get noticeably more complex is manipulating the
variable as if it were a list, with functions like firstword, lastword,
etc. because those functions must first chop the string up into words,
then operate on those, and that happens every time the function is
invoked.
If that happens a lot, then you should simply construct the lists once and 
keep them...
--
  -- Howard Chu
  CTO, Symas Corp.           http://www.symas.com
  Director, Highland Sun     http://highlandsun.com/hyc/
  Chief Architect, OpenLDAP  http://www.openldap.org/project/

_______________________________________________
Bug-make mailing list
Bug-make@gnu.org
https://lists.gnu.org/mailman/listinfo/bug-make

Reply via email to