diff options
author | Denys Vlasenko <vda.linux@googlemail.com> | 2014-11-26 17:17:59 +0300 |
---|---|---|
committer | Denys Vlasenko <vda.linux@googlemail.com> | 2014-11-26 17:17:59 +0300 |
commit | 04c14176023c65550fd46c2e44a1aa04d426d69a (patch) | |
tree | 71ac5af09a5303ba891b28bc879a10e1da92c6dc /libbb | |
parent | 2835a224cd603489ac08625265d383d4690cb58a (diff) |
libbb: use ARG_MAX for bb_arg_max() only if it's 60k+
Sometimes ARG_MAX is small (like 32k) yet sysconf(_SC_ARG_MAX)
is big, and people prefer using the bigger value.
OTOH, with sufficiently large ARG_MAX, further wins from
sysconf(_SC_ARG_MAX) being bigger are exponentially smaller:
you can see 4 times fewer fork+execs when you run find, but
when each execed process already takes a thousand parameters
it's likely execution time is dominated by what that process
does with each parameter.
Thus, with this change ARG_MAX is used if it's sufficiently big,
otherwise sysconf(_SC_ARG_MAX) is used.
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
Diffstat (limited to 'libbb')
-rw-r--r-- | libbb/sysconf.c | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/libbb/sysconf.c b/libbb/sysconf.c index 031901980..cfad9cdc0 100644 --- a/libbb/sysconf.c +++ b/libbb/sysconf.c @@ -8,7 +8,7 @@ */ #include "libbb.h" -#if !defined(ARG_MAX) && defined(_SC_ARG_MAX) +#if !defined(bb_arg_max) unsigned FAST_FUNC bb_arg_max(void) { return sysconf(_SC_ARG_MAX); |