hashmap: add string interning API
Interning short strings with high probability of duplicates can reduce the memory footprint and speed up comparisons. Add strintern() and memintern() APIs that use a hashmap to manage the pool of unique, interned strings. Note: strintern(getenv()) could be used to sanitize git's use of getenv(), in case we ever encounter a platform where a call to getenv() invalidates previous getenv() results (which is allowed by POSIX). Signed-off-by: Karsten Blees <blees@dcon.de> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:

committed by
Junio C Hamano

parent
ab73a9d119
commit
7b64d42d22
@ -193,6 +193,21 @@ more entries.
|
||||
`hashmap_iter_first` is a combination of both (i.e. initializes the iterator
|
||||
and returns the first entry, if any).
|
||||
|
||||
`const char *strintern(const char *string)`::
|
||||
`const void *memintern(const void *data, size_t len)`::
|
||||
|
||||
Returns the unique, interned version of the specified string or data,
|
||||
similar to the `String.intern` API in Java and .NET, respectively.
|
||||
Interned strings remain valid for the entire lifetime of the process.
|
||||
+
|
||||
Can be used as `[x]strdup()` or `xmemdupz` replacement, except that interned
|
||||
strings / data must not be modified or freed.
|
||||
+
|
||||
Interned strings are best used for short strings with high probability of
|
||||
duplicates.
|
||||
+
|
||||
Uses a hashmap to store the pool of interned strings.
|
||||
|
||||
Usage example
|
||||
-------------
|
||||
|
||||
|
Reference in New Issue
Block a user