Source code

Revision control

Copy as Markdown

Other Tools

--- a/src/htypes.hxx
+++ b/src/htypes.hxx
@@ -62,13 +62,18 @@
# define HUNSPELL_THREAD_LOCAL static
#endif
+// Field order chosen to minimize padding on 32-bit and 64-bit ABIs:
+// pointers first, then 2-byte fields, then 1-byte fields. On wasm32 this
+// packs to 20 bytes vs 24 with the upstream order; on 64-bit native, from
+// 40 to 32 bytes. Both savings are meaningful for large dictionaries
+// (e.g. Bulgarian has ~700K entries).
struct hentry {
+ unsigned short* astr; // affix flag vector
+ struct hentry* next; // next word with same hash code
+ struct hentry* next_homonym; // next homonym word (with same hash code)
unsigned short blen; // word length in bytes
unsigned short clen; // word length in characters (different for UTF-8 enc.)
short alen; // length of affix flag vector
- unsigned short* astr; // affix flag vector
- struct hentry* next; // next word with same hash code
- struct hentry* next_homonym; // next homonym word (with same hash code)
char var; // bit vector of H_OPT hentry options
char word[1]; // variable-length word (8-bit or UTF-8 encoding)
};