This gets rid of bsearch() in favor of hashed lookup. The main advantage is that it becomes far cheaper to add new GUCs, since we needn't re-sort the pointer array. Adding N new GUCs had been O(N^2 log N), but now it's closer to O(N). We need to sort only in SHOW ALL and equivalent functions, which are hopefully not performance-critical to anybody.
Also, merge GetNumConfigOptions() into get_guc_variables(), because in a world where the set of GUCs isn't fairly static you really want to consider those two results as tied together not independent.
3057465acf Replace the sorted array of GUC variables with a hash table.
src/backend/utils/misc/guc.c | 385 ++++++++++++++++++++++-------------
src/backend/utils/misc/guc_funcs.c | 39 ++--
src/backend/utils/misc/help_config.c | 5 +-
src/include/utils/guc.h | 1 -
src/include/utils/guc_tables.h | 2 +-
5 files changed, 272 insertions(+), 160 deletions(-)