#### 2.18.1 Creating and freeing a hash table

To create a hash table, create an instance of a `struct bfd_hash_table` (defined in `bfd.h`) and call `bfd_hash_table_init` (if you know approximately how many entries you will need, the function `bfd_hash_table_init_n`, which takes a size argument, may be used). `bfd_hash_table_init` returns `FALSE` if some sort of error occurs.

The function `bfd_hash_table_init` take as an argument a function to use to create new entries. For a basic hash table, use the function `bfd_hash_newfunc`. See Deriving a New Hash Table Type, for why you would want to use a different value for this argument.

`bfd_hash_table_init` will create an objalloc which will be used to allocate new entries. You may allocate memory on this objalloc using `bfd_hash_allocate`.

Use `bfd_hash_table_free` to free up all the memory that has been allocated for a hash table. This will not free up the `struct bfd_hash_table` itself, which you must provide.

Use `bfd_hash_set_default_size` to set the default size of hash table to use.