On Tue, Nov 22, 2011 at 12:10 AM, Dave Martin <dave.mar...@linaro.org> wrote:
> Defining a macro seems to eat up about half a megabyte of memory,
> due to the excessively large size of the macro arguments hash table
> (large enough for 65537 entries by default).

Hi Dave.  Just bikshedding responses from me, but that's better than nothing.

> As a result, gas memory consumption becomes rather huge when a
> modestly large number (hundreds) of macros are defined.
>
> In fact, it appears to make little sense to force the size of macro
> argument hash tables to be the same as the size of other hash
> tables, since the typical number of macro arguments is very small
> compared with the number of opcodes, macros or symbols; and because
> the number of macros is not limited to a small constant number.
>
> This patch uses a smaller default size for the macro argument hash
> tables (43) which should be enough for virtually everyone.
> hash_new_sized () is exported from hash.c in order to allow hash
> tables of multiple sizes to be created.

What's the most arguments you've seen in real code?  Does recursion or
nesting of macros ever blow out this number?

> A new argument, --macro-args is added to allow this number to be
> customised.

I don't like this.  The default should be high enough that no one ever
needs the argument.

> These numbers are deliberately conservative -- they could perhaps
> be reduced further.
>
> Caveats:
>
>  * I'm not a hash table expert, so the exact size values I've
>    chosen may not be optimal.

Does it matter?  Is the hash table checked often, or is it just used
as a convenient name/value container?

_______________________________________________
linaro-toolchain mailing list
linaro-toolchain@lists.linaro.org
http://lists.linaro.org/mailman/listinfo/linaro-toolchain

Reply via email to